用于“.each do”结构的嵌套资源形式的路由问题 - Rails 3

时间:2011-06-21 12:15:37

标签: ruby-on-rails routing datamapper nested-forms

在我的路线中,我有:

resources :accounts do
    resources :transfers
      put '/transfers/:id(.:format)' => 'transfers#accept'
  end

在我的模特中:

class Transfer
  include DataMapper::Resource
  belongs_to :account
  belongs_to :alias_from, "Alias"
  belongs_to :alias_to, "Alias"

class Account
  include DataMapper::Resource
  belongs_to :user
  has n, :transfers

在我看来:

  <% @transfers_in.each do |income|%>
  Amount: <%= income.amount%> <%= income.account.currency%> 
      <% form_for ([???, income]), :as => :transfer, :url => {:controller=>'transfers', :action => 'accept'} do |f|%>
      Choose the account <%= f.collection_select :account, @accounts, :name, :name %> 
      <%= f.submit :value => "Accept" %>
      <% end %>
 <% end %>

如果此处@transfers_in被其他协会调用,我应该如何在此处呼叫该帐户?

@aliases = @owner.aliases.all()
@transfers_in = @aliases.transfers_in.all()

我尝试过像

这样的东西
<% @acc = Account.all()%>
          <% @trs = @acc.transfers.get(:id => income.account)%>
          <% form_for ([@trs, income]), ....

但那给了我

  

没有路线匹配   {:控制器=&gt; “中转让”,   :动作=&gt; “中接受”}

在rake路线中存在这样的路线。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在您的路由中,使用Rails为路由提供的宏应该会有更好的结果。不要使用旧式路线图,请尝试:

resources :accounts do
  resources :transfers do
    put 'accept', :on => :member
  end
end

路由器在RESTful路由方面非常聪明,但是当你开始手动映射事物时,它会变得混乱......特别是当你在嵌套的RESTful路由中进行时。