ActiveRecord的HAS_ONE关系并不在某些情况下返回
-
22-09-2019 - |
题
鉴于三个模型,其各自互相嵌套。如果我创建顶级对象,并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对象并不真正了解它的爸爸是在创建时谁。
不隶属于 StackOverflow