それぞれが入れ子になっている 3 つのモデルがあるとします。最上位オブジェクトを作成し、他の子オブジェクトを build_* にすると、元のインスタンスの save() 前後のリレーションシップを通じてすべての子オブジェクトを取得できます。ただし、 find(:id) の後に第 2 レベルのネストされたオブジェクトを取得しようとすると、元の親は失敗します。ただし、第 1 レベルのネストされたオブジェクトは取得できます。これは通常コントローラーで発生しますが、以下のコンソール出力で説明します。
私は何を見落としていますか?
前もって感謝します!
~jpv
>> l = Lead.new :buyer_name => 'キム・ポッシブル', :email => 'kim@possible.com', :phone => '7131231234' >> l.build_buyer >> l.buyer.name = 'キム バイヤー' >> l.バイヤー >> l.buyer.build_contact_detail >> l.buyer.contact_detail.email = "kim-contact-detail@possible.com" >> l.save #true を返す >> l.buyer #THIS WORKS => #<バイヤー ID: 1、名前: "キム バイヤー"、リード ID: 1> >> l.buyer.contact_detail #THIS WORKS => #<ContactDetail id: 1、company_id: nil、buyer_id: 1、email: nil、address_line_1: nil、address_line_2: nil、city: nil、state: nil、postal_code: nil> >> l2 = Lead.find(1) => #<リード ID: 1、company_id: nil、buyer_id: nil、public_lead_id: nil、buyer_name: "キム ポッシブル"、company_name: nil、メール: "kim@possible.com"、電話: "7131231234"> >> l2.buyer #これは期待どおりに動作します => #<バイヤー ID: 1、名前: "キム バイヤー"、リード ID: 1> >> l2.buyer.contact_detail #THIS BREAKS =>なし
以下のすべてのボイラープレートのもの:
クラスリーダー has_one :買い手 #... 終わり クラス バイヤー has_one :contact_detail 所属先:リード #... 終わり クラス ContactDetail 所属先:バイヤー #... 終わり
適切な外部キーは、「belongs_to」クラスのそれぞれにあります。
クラス CreateBuyers < ActiveRecord::Migration デフセルフアップ create_table :buyers do |t| t.string :名前 t.integer :lead_id ... class CreateContactDetails < ActiveRecord::Migration デフセルフアップ create_table :contact_details do |t| t.integer :buyer_id