ActiveRecord has_oneの関係は、特定の場合には戻りません。
-
22-09-2019 - |
質問
お互いにそれぞれのネストされた3つのモデルを考えます。私はトップレベルのオブジェクトとbuild_ *他の子オブジェクトを作成した場合、私は元のインスタンス上)(保存する前と後の関係を通じて、すべての子オブジェクトを取得することができます。 (:ID)、それが失敗した元の親しかし、私はを第二レベル見つかったらのネストされたオブジェクトを取得しようとした場合。しかし私は、1レベルのネストされたオブジェクトを取得することができます。これは通常のコントローラで起こるが、私は以下のコンソール出力でそれを示します。
私は何を望むのですか?
事前に感謝します!
〜JPV
>> l = Lead.new :buyer_name => 'Kim Possible', :email => 'kim@possible.com', :phone => '7131231234' >> l.build_buyer >> l.buyer.name = 'kim buyer' >> l.buyer >> l.buyer.build_contact_detail >> l.buyer.contact_detail.email = "kim-contact-detail@possible.com" >> l.save #returns true >> l.buyer #THIS WORKS => #<Buyer id: 1, name: "kim buyer", lead_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) => #<Lead id: 1, company_id: nil, buyer_id: nil, public_lead_id: nil, buyer_name: "Kim Possible", company_name: nil, email: "kim@possible.com", phone: "7131231234"> >> l2.buyer #THIS WORKS AS EXPECTED => #<Buyer id: 1, name: "kim buyer", lead_id: 1> >> l2.buyer.contact_detail #THIS BREAKS => nil
以下のすべての定型のもの:
class Lead has_one :buyer #... end class Buyer has_one :contact_detail belongs_to :lead #... end class ContactDetail belongs_to :buyer #... end
適切な外部キーは、クラス「BELONGS_TO」のそれぞれに記載されています。
class CreateBuyers < ActiveRecord::Migration def self.up create_table :buyers do |t| t.string :name t.integer :lead_id ... class CreateContactDetails < ActiveRecord::Migration def self.up create_table :contact_details do |t| t.integer :buyer_id
解決
私はあなたが熱心な負荷ネストされた子オブジェクトにオブジェクトを期待しているので、あなたがアップつまずい取得するかもしれないと思います。一般的に、あなたはそれが検索で発生するために明示的に指定する必要があります。 【:借り手、{:借り手=>:contact_detail}] =>含む:追加してみてください。検索するためのオプションに、それが動作するかどうかを確認
他のヒント
は、この作業を行いますが...
を行う場合l.buyer.name = 'kim buyer'
l.save
l.buyer.build_contact_detail
...
もしそうなら、これはContactDetailオブジェクトは本当に、そのお父さんは、作成時には誰を知らないとバグレール可能性があります。
所属していません StackOverflow