鉴于三个模型,其各自互相嵌套。如果我创建顶级对象,并build_ *其他子对象,我可以通过对原始实例的关系之前和之后保存()检索所有子对象。但是,如果我尝试检索的 2级嵌套后找到对象(: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