我相信我已经在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 %>
答案 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关联文档以获取更多详细信息。