复杂的轻微嵌套形式

时间:2013-05-13 16:27:23

标签: ruby-on-rails ruby ruby-on-rails-3

我正试图制作一种有点复杂的有点窝形式。我所拥有的(简化)如下:

模型/ 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 %>

但我似乎无法弄清控制器端逻辑来匹配它。控制器方面需要做什么来使该视图(或具有相同效果的东西)起作用?

1 个答案:

答案 0 :(得分:0)

您需要在模型中设置accepts_nested_attributes_for

当你得到那个设置时,你需要做的就是product = Product.create!(params[:product])嵌套对象将自动保存,假设嵌套表单是正确构建的。

如果您需要帮助构建嵌套表单,请查看this链接上的fields_for帮助。