Frage

Bei drei Modellen, die in ihnen jeweils verschachtelt sind. Wenn ich das Top-Level-Objekt erstellen und build_ * die anderen untergeordneten Objekte, kann ich alle untergeordneten Objekte durch die Beziehungen abrufen vor und nach dem Speichern () auf der ursprünglichen Instanz. Allerdings, wenn ich versuchen, das 2. Ebene verschachteltes Objekt nach Entdeckung abzurufen (: id) die ursprüngliche Mutter versagt es. Ich kann die erste Ebene abrufen Objekt verschachtelt, jedoch. Dies geschieht in der Regel in einem Controller, aber ich werde es in Konsolenausgabe unten zeigen.

Was bin ich mit Blick auf?

Vielen Dank im Voraus!
~ 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

Alle vorformulierten Sachen unter:

class Lead
  has_one :buyer
  #...
end

class Buyer
  has_one :contact_detail
  belongs_to :lead
  #...
end

class ContactDetail
  belongs_to :buyer
  #...
end

Die entsprechenden Fremdschlüssel sind in jedem der "belongs_to" Klassen.

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
War es hilfreich?

Lösung

Ich denke, man könnte immer ausgelöst, weil Sie das Objekt eifrig Last verschachtelte untergeordnete Objekte sind zu erwarten. In der Regel haben Sie explizit angeben, für das in der Entdeckung geschehen. Versuchen Sie: include => [: Kreditnehmer, {: Kreditnehmer =>: contact_detail}]. Zu den Optionen für die Entdeckung und sehen, ob das funktioniert

Andere Tipps

Ist diese Arbeit, wenn Sie tun ...

l.buyer.name = 'kim buyer'
l.save
l.buyer.build_contact_detail
...

Wenn ja, könnte dies ein Schiene Fehler mit dem ContactDetail Objekt nicht wirklich zu wissen, wer sein Vater zum Zeitpunkt der Erstellung ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top