2012-03-20 16 views
0

が、私はこれらのモデルがあります。fields_forとhas_many_through

class Order < ActiveRecord::Base 
    has_many :order_lines 
    has_many :prizes, :through => :order_lines 
    accepts_nested_attributes_for :order_lines 
end 

class Prize < ActiveRecord::Base 
    has_many :order_lines 
end 

class OrderLine < ActiveRecord::Base 
    belongs_to :order 
    belongs_to :prize 
end 

は、私は、ユーザーが作品を入力することができ、その隣のテキストボックスを持つすべての賞を表示するためのフォームでネストされた形をしたいと思います(例えば量注文する)。フォームが送信されると、createアクションはそれに応じてorder_linesを作成する必要があります。私はどこでも解決策を見つけることができません。

答えて

0

まず、ご注文のモデルではaccepts_nested_attributes_for :prizesをご使用ください。それは簡単だと、ちょうどビューにフォームを追加した後

(追加のステップ・コントローラがありません)

<%= form_for @order do |order_form| %> 
    .. 
    <%= order_form.fields_for :prizes do |prizes_form| %> 
    <%= prizes_form.text_field :piece %> 
    .. 
    <% end %> 
.. 
<% end %> 

これはストレートドキュメント... You should definitely check that firstからです。

+0

ご返信ありがとうございます。これを行うとき、fields_forは賞を反復しません。ブロック内のコードはまったく実行されません。 – jriff

+0

コードは正常に実行されますが、注文に賞金がないため、おそらく何も表示されません。注文フォームで賞品を編集してインスタンス化する場合は、@ order.prizes.buildをコントローラに追加する必要があります。詳細については、[このリンク](http://railscasts.com/episodes/196-nested-model-form-part-1)を参照してください。 – shuriu

+0

@ order.prizes.buildを実行すると、空白の賞が1つもらえますブロック内のインスタンス。 RailsCastへのリンクは、1対多数の関連がある場合にのみ適用されます。それはここではそうではありません:-( – jriff

関連する問題