/ / Abrufen der ActiveRecord-Zuordnungs-ID in der Rückruffunktion - Ruby-on-Rails, Ruby-on-Rails-3, Activerecord

Abrufen der ActiveRecord-Zuordnungs-ID in die Rückruffunktion - Ruby-on-Rails, Ruby-on-Rails-3, Aktiverecord

Ich habe zwei zugehörige Modelle, Mitarbeiter und Arzt:

class Employee < ActiveRecord::Base
has_one :doctor, :dependent => :destroy
...
end

class Doctor < ActiveRecord::Base
belongs_to :employee
end

Wenn der Arzt bereits erstellt und gespeichert wurde.
Ich möchte Zugriff auf die Ärzte-ID in den Mitarbeitern erhalten. After_save Rückruf:

class Employee < ActiveRecord::Base
...
after_save :save_picture
...
private
def save_picture
if doctor
file_name = "doctor_" + doctor.id.to_s + ".jpg"
...
end
end
end

Ich kann auf jede Methode eines Arztes zugreifen und jede von ihnen funktioniert einwandfrei, aber "id" - es gibt "nil" zurück.
Was mache ich falsch?

Antworten:

0 für die Antwort № 1

Hat Ihr Doctor-Modell einen ID-Accessor?

Versuchen doctor_id Anstatt von doctor.id, eine Datenbankabfrage weniger :)


0 für die Antwort № 2

Ich fand heraus, wo mein Fehler war:

Ich hatte einen schlechten Accessor in Employee Klasse

class Employee < ActiveRecord::Base
...
def is_doctor= val
create_doctor if val == "1"
end
...
end

Es wurde versucht, einen neuen Arzt zu erstellen, aber es liegt ein Fehler bei der Aktualisierungsaktion vor. Danach war das ID-Attribut des Arztes im "Selbst" -Objekt leer.

Die Lösung bestand darin, Assoziationsmanipulationen einem anderen zuzuordnen after_save Ruf zurück:

class Employee < ActiveRecord::Base
has_one :doctor, :dependent => :destroy
after_save :save_roles
after_save :save_picture
...
def is_doctor= val
@doc = true if val == "1"
end

private

def save_roles
if doctor
doctor.destroy unless @doc
else
create_doctor if @doc
end
@doc = nil
end

def save_picture
if doctor
file_name = "doctor_" + doctor.id.to_s + ".jpg"
...
end
end
end