【问题标题】:Problem with creating form for the element's child in the ".each do |f|" structure (form for nested resource) in Rails 3在“.each do |f|”中为元素的子元素创建表单的问题Rails 3 中的结构(嵌套资源的表单)
【发布时间】:2011-06-16 17:50:24
【问题描述】:

我有模型帐户,has n, :transfers。 在所有可用帐户的列表中

<% @accounts.each do |acc| %>
  <%= acc.name%>
  <%= acc.value%>
<%end%>

#in the controller
@accounts = @owner.accounts.all( :name.not => nil )

我需要添加一个从该帐户创建转账的选项,例如:

<%= form_for @new_transfer, :url => {:controller => "transfers", :action=>"create"} do |trans_form|%>
  <%= trans_form.text_field :amount %></br>
  <%= trans_form.text_field :to %></br>
  <%= trans_form.text_area :comment, :rows=>5 %></br>
  <%= submit_tag %>
<%end%> 

#in controller
@new_transfer = Transfer.new()

我应该如何声明这个新子项的父项?我尝试过&lt;%= form_for acc.@new_transfer@new_transfer = @accounts.each.transfers.new()&lt;%= form_for acc.transfersfields_for 之类的方法,但它们似乎都不起作用。将感谢任何建议。

【问题讨论】:

  • 您想为新的转账指定一个账户吗?
  • 是的,应该从一个帐户创建新的转移

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


【解决方案1】:

您需要查看路由,您应该考虑在account 下为transfer 模型创建一个嵌套路由,并在控制器级别范围内将调用转移到该帐户。

例如路线

resources :accounts do
  resources :transfers
end

然后在您的转帐控制器中使用前置过滤器来查找account_id 的帐户(除索引操作之外的所有操作):

def create
  @transfer =  @account.transfers.new params[:transfer]

  ...

end 

查看:

form_for @account, @transfer do ..

关于嵌套资源的更多信息:

http://guides.rubyonrails.org/routing.html#nested-resources

【讨论】:

  • 这似乎是正确的做法,谢谢。但是,如果他们的列表由@accounts = @owner.accounts.all 调用并且仅在此之后 - 由@accounts.each do |acc| 调用,我应该如何调用单个@account
  • 我试过 @account = @accounts.each @transfer = @account.transfers.new() 但这给了我 no block given (yield) 错误
  • 我看到了你的问题,try, acc, and acc.transfers.new
  • 是的,这行得通,还有 form_for([acc, @transfer]),谢谢!
  • 顺便说一句,我刚刚停止了同样的问题,但有更新操作。我应该如何以相同的形式调用单个元素,而不是新元素?
【解决方案2】:

试试,

form_for(acc, acc.transfers.build) do |f|
.....
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多