Ruby on rails 如何创建一个嵌套表单,该表单包含一个字段列表,其长度取决于另一个模型的计数?
我的应用程序包含客户和项目。对于不同的客户,商品可以有不同的价格。因此,我有一个Ruby on rails 如何创建一个嵌套表单,该表单包含一个字段列表,其长度取决于另一个模型的计数?,ruby-on-rails,ruby-on-rails-4,nested-forms,Ruby On Rails,Ruby On Rails 4,Nested Forms,我的应用程序包含客户和项目。对于不同的客户,商品可以有不同的价格。因此,我有一个prices表,它引用了customers和items表 创建新项目时,我希望用户也能够在同一表单上为每个客户单独设置每个价格。所以,在商品表单上,如果有3个客户,我应该看到3个名字,每个名字旁边都有一个价格字段 问题是,那些价格记录实际上还不存在,我不知道如何构建该列表并正确呈现它 如何构建此表单 下面是我到目前为止得到的(尽可能多地提炼) [更新]-我已经知道如何获得视图中呈现的所有字段。但是,每个生成的价格字段
prices
表,它引用了customers
和items
表
创建新项目时,我希望用户也能够在同一表单上为每个客户单独设置每个价格。所以,在商品表单上,如果有3个客户,我应该看到3个名字,每个名字旁边都有一个价格字段
问题是,那些价格记录实际上还不存在,我不知道如何构建该列表并正确呈现它
如何构建此表单
下面是我到目前为止得到的(尽可能多地提炼)
[更新]-我已经知道如何获得视图中呈现的所有字段。但是,每个生成的价格字段的ID都是相同的,我认为这会破坏发送的JSON(即使表单上有多个价格字段,也只会收到一个价格)。基于这些文档,我认为我应该能够在的字段中包含数组(@item.prices
),而不是包含@items.prices.each
,但这会引发价格的“未定义方法错误”
客户型号:
class Customer < ActiveRecord::Base
has_many :prices
has_many :items, through: :prices
end
class Item < ActiveRecord::Base
has_many :prices
has_many :customers, through: :prices
accepts_nested_attributes_for :prices
end
class Price < ActiveRecord::Base
belongs_to :item
belongs_to :customer
end
def new
@item = Item.new
@customers = Customer.all
@customers.each do |cust|
@item.prices.build
# somehow need to also make all these new items have the correct customer IDs
end
end
当前新项目视图:[已更新]
<%= form_for :item, url: items_path do |f| %>
<p>
<%= f.label :name, 'Item Name' %><br />
<%= f.text_field :name, class: 'form-control', :autofocus => true %>
</p>
<% @item.prices.each do |item| %>
<%= f.fields_for :prices, item do |p| %>
<p>
<%= p.label :price_in_cents, 'Price' %><br />
<%= p.text_field :price_in_cents, class: 'form-control' %>
</p>
<% end %>
<% end %>
<div class="form-group">
<%= f.submit 'Create', class: 'btn btn-primary' %>
</div>
<% end %>
正确%>
我是一个RoR新手,我很难想象这应该如何构建。有什么见解吗?我推荐cocoon gem。它将在调用页面时动态创建所需的表单数量 我想这会对你有所帮助,谢谢,我一直在翻阅那些片段,但在我的特殊情况下,它仍然不适合我。我更新了我的问题,希望澄清我到底需要做什么。哦,很有趣,谢谢!我可能会尝试一下,但是,我仍然想了解如何在没有插件的情况下实现这一点。