1

Productモデル、Order、およびモデルがありOrderItemます。オブジェクトには 1 つの
(つまり、製品) があり、複数の注文項目があります。OrderItemProductbelongs to
Order

注文にを追加する場合はOrderItem、フォームに記入します。フィールドの 1 つは、この注文項目に割り当てられる製品を入力することです。order モデルはproduct_idを外部キーとして格納するため、Rails は (当然のことながら) 書き込み時に文句を言います。

<%= form_for @orderItem, url: {:action => :create} do |f| %>
    <p>
      <%= f.label :product_name %>
      <%= f.text_field :product_name %>
    </p>
    <%= f.submit %>
<% end %>

私が念頭に置いているのは、誰かがフォームを使用して注文アイテムを作成することです。この注文項目に割り当てる製品を選択するとき、製品名のリスト (一意) から名前を選択します。フォームを送信すると、コントローラーは適切なProductオブジェクトを取得し、その ID を に割り当てますOrderItem

これを達成するためにフォームを設定するにはどうすればよいですか?

4

1 に答える 1

0

ネストされた属性を使用したいようです。1 つのフォームからOrderItemと の両方に関する情報を同時に保存できます。Product

OrderItemに、次の行を追加しますaccepts_nested_attributes_for :product

次に、フォームで次のようなものが必要になります。

<%= form_for @orderItem, url: {:action => :create} do |f| %>
    <p>
      <%= fields_for :product do |fp| %>
        <%= fp.label :product_name %>
        <%= fp.text_field :product_name %>
      <% end %>
    </p>
    <%= f.submit %>
<% end %>

(ブロック内でのfp.label代わりの使用に注意してください。f.labelfields_for

上記は記憶によるものなので、間違いがあるかもしれません (そして、おそらくあなたOrderItemsControllerも何かを変更する必要があるでしょう) が、出発点になるはずです。

このRailscastも役立つかもしれません。

于 2013-10-31T04:17:05.297 に答える