0

私のアプリケーションには顧客とアイテムがあります。商品の価格は、顧客ごとに異なる場合があります。したがって、とテーブルpricesの両方を参照するテーブルがあります。customersitems

新しいアイテムを作成するとき、ユーザーが同じフォームですべての顧客に対して個別に各価格を設定できるようにしたいと考えています。したがって、そのアイテム フォームに 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 の初心者であり、これをどのように構築すべきかを理解するのに苦労しています。洞察はありますか?

4

1 に答える 1

0

繭の宝石をお勧めします。ページが呼び出されると、必要な量のフォームが動的に作成されます。

于 2013-11-08T18:19:52.503 に答える