Active has_one Beziehung nicht zurück in bestimmten Fällen
-
22-09-2019 - |
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
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.