我正试图制作一种有点复杂的有点窝形式。我所拥有的(简化)如下:
模型/ product.rb
class Product < ActiveRecord::Base
attr_accessible :name
has_many :colors
end
模型/ color.rb
class Color < ActiveRecord::Base
attr_accessible :quantity
belongs_to :product
end
视图/管理/ update_inventories.html.erb
<% @products.each do |p| %>
<%= p.name %>
<% p.colors.each do |c| %>
<%= c.name %>:
<%= form_for :color, :url => color_update_path(:id => v.id) do |f| %>
<%= f.number_field :quantity, :value => c.quantity, :min => 0 %>
<%= submit_tag "Update" %>
<% end %>
<% end %>
<% end %>
问题在于它会产生惊人数量的表格,你必须用一套西装更新一件西装。我想要的是这样的观点:
查看/管理/ update_inventories_revised.html.erb
<%= form_for :inventory, :url => custom_update_path do |f| %>
<% @products.each do |p| %>
<%= p.name %>
<% p.colors.each do |c| %>
<%= f.number_field :quantity, :value => c.quantity, :min => 0 %>
<% end %>
<% end %>
<% f.submit_tag "Update All" %>
<% end %>
但我似乎无法弄清控制器端逻辑来匹配它。控制器方面需要做什么来使该视图(或具有相同效果的东西)起作用?
答案 0 :(得分:0)
您需要在模型中设置accepts_nested_attributes_for。
当你得到那个设置时,你需要做的就是product = Product.create!(params[:product])
嵌套对象将自动保存,假设嵌套表单是正确构建的。
如果您需要帮助构建嵌套表单,请查看this链接上的fields_for
帮助。