Ich verwende Rails 4.2.4. Wie kann ich automatisch mein übergeordnetes Objekt laden, wenn ich das untergeordnete Objekt lade? Ich habeWie lade ich in Rails automatisch mein übergeordnetes Objekt, wenn das untergeordnete Objekt geladen wird?
class MyObject < ActiveRecord::Base
belongs_to :address, class_name: 'Address', foreign_key: :address_id, :autosave => true, dependent: :destroy
Aber wenn ich
@my_object = MyObject.find(params[:id])
puts "address; #{@my_object.address} address_id: #{@my_object.address_id}"
Der Ausgang nennen ist
address; address_id: 6792
Was bedeutet, dass kein übergeordnetes Objekt geladen wurde, obwohl klar gibt es eine Adressdatensatz an sie gebunden. Ich möchte, dass es automatisch geladen wird, wenn mein Modell ist. Wie kann ich das machen?
Edit: Als Reaktion auf wishalizer Vorschlag, änderte ich meine Modelle zu
class MyObject < ActiveRecord::Base
…
belongs_to :address, inverse_of: :my_object
und
class Address < ActiveRecord::Base
has_one :my_object, inverse_of: :address
aber immer noch den Fehler
NoMethodError (undefined method `includes' for #<MyObject:0x007fb7232415f8>):
app/controllers/application_controller.rb:9:in `current_my_object'
app/controllers/my_objects_controller.rb:5:in `edit'
wenn der Vorschlag der Anwendung gegeben.
ich meine Linie geändert, was man hatte, „@my_object = MyObject.find (params [: id]). includes (: address) ", hat aber den Fehler" NoMethodError (undefined method 'includes 'für #):" –
Dave
Okay. Ich habe der Antwort über die Verwendung von inverse_of einen Abschnitt hinzugefügt – Elvn
Ich habe keine Validatoren, aber sogar die Bearbeitung des Codes, um "inverse_of" aufzunehmen, führt zu demselben Fehler. Ich stelle meine Modelle in meine Frage. – Dave