私のアプリケーションには顧客とアイテムがあります。商品の価格は、顧客ごとに異なる場合があります。したがって、とテーブルprices
の両方を参照するテーブルがあります。customers
items
新しいアイテムを作成するとき、ユーザーが同じフォームですべての顧客に対して個別に各価格を設定できるようにしたいと考えています。したがって、そのアイテム フォームに 3 人の顧客がいる場合、3 人の名前が表示され、それぞれの横に価格フィールドが表示されます。
問題は、これらの価格レコードがまだ実際には存在しないことです。そのリストを作成して適切にレンダリングする方法がわかりません。
このフォームを作成するにはどうすればよいですか?
以下は、これまでに得たものです(可能な限り蒸留しました)。
[更新] - すべてのフィールドをビューにレンダリングする方法を理解しました。ただし、生成された各価格フィールドの ID は同じになってしまうため、送信される JSON が台無しになると思います (フォームに複数の価格フィールドがあっても、1 つの価格しか受信されません)。ドキュメントに基づいて、 price_in_centsの「未定義のメソッドエラー」をスローする@item.prices
代わりに、fields_forに配列()を含めることができるはずだと思います。@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 の初心者であり、これをどのように構築すべきかを理解するのに苦労しています。洞察はありますか?