如何使用嵌套表单和has_many:through添加和编辑多个模型

时间:2015-04-15 14:02:14

标签: ruby-on-rails-3.2 nested-forms has-many-through

我相信我已经在SO上阅读了所有相关的答案,但仍未找到解决方案,所以这就是我的问题。我已经继承了'与产品,批次和数量一起使用的应用程序。批次将有许多产品,产品可以出现在许多批次和许多数量中。因此,隐含了has_many:through关系,因为连接表将有一个额外的产品数量列;

class Batch < ActiveRecord::Base
  has_many :quantities
  has_many :products, :through => :quantities
  accepts_nested_attributes_for :products
end

class Product < ActiveRecord::Base
  has_many :quantities
  has_many :batches, :through => :quantities
  accepts_nested_attributes_for :quantities
end

class Quantity < ActiveRecord::Base
  belongs_to :product
  belongs_to :batch
end

现在,假设我需要创建一个新批处理。我希望用户能够指定要在批次中显示的产品,还要指定每种产品的数量。

如何设置表单以便指定产品和数量?我可能还需要控制器和表格的一些细节。在新的&#39;动作我可以用;

构建所需的模型
@batch = Batch.new
@qty = @batch.quantities.build.build_product

但是我随后在表格中挣扎 - 如何指定字段?

<%= form_for(@batch) do |f| %>
    <% f.fields_for :products do |prod_form| %>
        <% prod_form.fields_for :quantity do |qty_form| %>
        <% end %>     
    <% end %> 
<% end %> 

1 个答案:

答案 0 :(得分:0)

答案与找到的here

相同

对于has_one和has_many关联,构建方法签名是不同的。

class User < ActiveRecord::Base
  has_one :profile
  has_many :messages
end

has_many关联的构建语法:

user.messages.build

has_one关联的构建语法:

user.build_profile  # this will work

user.profile.build  # this will throw error

阅读has_one关联文档以获取更多详细信息。