質問

お互いにそれぞれのネストされた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オブジェクトは本当に、そのお父さんは、作成時には誰を知らないとバグレール可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top