我的应用程序有客户和项目。对于不同的客户,商品可以有不同的价格。所以,我有一个prices
同时引用customers
和表的items
表。
创建新项目时,我希望用户还能够在同一表单上为每个客户单独设置每个价格。因此,在该项目表单上,如果有 3 个客户,我应该会看到 3 个名称,每个名称旁边都有一个价格字段。
问题是,这些价格记录还没有真正存在,我无法弄清楚如何构建该列表并正确呈现它。
我怎样才能建立这个表格?
以下是我到目前为止所得到的(尽可能蒸馏)。
[更新] - 我已经弄清楚如何在视图中呈现所有字段。但是,每个生成的价格字段的 ID 最终都是相同的,我认为这会破坏发送的 JSON(即使表单上有多个价格字段,也只会收到一个价格)。根据文档,我认为我应该能够将数组 ( @item.prices
) 包含在 fields_for 中,而不是使用@items.prices.each
但会为 price_in_cents 引发“未定义的方法错误”。
客户型号:
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 新手,我很难想象应该如何构建它。有什么见解吗?