2011-07-14 12 views
4

Rails 3.1rc4を使用して、フォーム内のネストされたモデルにいくつか問題があります。Rails 3 Nested Modelフォーム

私は現在、次のようになりモデルがあります:

class Sale < ActiveRecord::Base 
    attr_accessible :customer_id, :vehicle_id, :sale_date 

    belongs_to :customer 
    accepts_nested_attributes_for :customer 
end 

class Customer < ActiveRecord::Base 
    attr_accessible :dealership_id, :first_name, :last_name, :address1, :email 

    belongs_to :dealership 

    has_many :sales 
    has_many :vehicles, :through => :sales 

end 

を私は明らかに少しこれらを切り捨ててきましたが、すべての重要な情報があります。

私は新しい顧客を作成することもできるセールフォームを設定しようとしています。そのため、販売モデルのaccepts_nested_attributes_for :customer行が表示されます。

マイフォームビューは(唯一の重要な部分、再び切り捨て)のようになります。

<%= form_for @sale, :html => {:class => 'fullform'} do |f| %> 

     <%= f.error_messages %> 

     <%= field_set_tag 'Customer Details' do %> 
      <% f.fields_for :customer do |builder| %> 
       <%= builder.label :first_name %><br> 
       <%= builder.text_field :first_name %> 
      <% end %> 
     <% end %> 
    <% end %> 

私が午前問題は、テキストフィールドやラベルもないということです。フォームがあるときFIRST_NAMEが現れていますレンダリング - エラーメッセージは表示されず、表示されません。

コントローラのnewメソッドで@sale.customer.buildの有無にかかわらず試してみましたが、それは効果がなかったようです。

ありがとうございます!

誰でも私が間違っていることを示唆することはできますか?

EDITは:誤解を避けるために、私の販売コントローラの新しい方法は、次のようになります。

def new 
    @sale = Sale.new 
    @sale.customer.build 
end 
+0

OKは、私の代わりに、@のsale.customer.build' 'の私は' @ sale.build_customer'すべきであることを示すいくつかの情報を見つけました。私はこれを反映するために新しい方法を修正しましたが、それでも役に立たない。 –

+0

新しいレコードを作成するのではなく、セールレコードを編集するためのフォームをテストしましたが、正常に動作することがわかりました。つまり、コントローラに空の顧客レコードを作成したことが原因です。 '@ sale.customer.build'と' @ sale.build_customer'の両方を動作させずに試してみたところ、誰でもコントローラに必要なものを提案できますか? –

答えて

4

Saleモデルであなたのattr_accessiblecustomer_attributesを追加します。

別の間違い。置き換え:付き

<%= f.fields_for :customer do |builder| %> 
+0

これは、販売に関連付けられた顧客がある場合にのみ、ネストされたフィールドを表示します。新しい顧客のためのフィールドを取得するには、コントローラで新しい顧客を構築することができます。このrailscastとその後のエピソードで、javascriptを使って新しい顧客フィールドを追加する方法をご覧ください。 http://railscasts.com/episodes/196-nested-model-form-part-1 –

+0

すでに述べたように、私は '@ sale.customer.build'(' @sale = Sale.new'の後)で既にこれを試しています。私のコントローラの新しい方法では効果がないようです。私も上記の調整を行いました(attr_accessibleに ':customer_attributes'を追加し、' = 'が欠けています)が、効果はありませんでした。 –

+0

あなたは '@ sale.customer.build'をあなたのコードに入れておくべきです(あなたはそれを言いました、それが私が繰り返しなかった理由です)。エラーメッセージがありますか?または、パラメータを投稿できますか? – apneadiving