Ho due modelli associati, impiegati e dottori:
class Employee < ActiveRecord::Base
has_one :doctor, :dependent => :destroy
...
end
class Doctor < ActiveRecord::Base
belongs_to :employee
end
Quando il medico è già stato creato e salvato.
Voglio ottenere l'accesso ai dottori id negli impiegati after_save callback:
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
Posso accedere a qualsiasi metodo di medici e nessuno di loro funziona bene, ma "id" - restituisce "nil".
Che cosa sto facendo di sbagliato?
risposte:
0 per risposta № 1Il tuo modello Doctor ha un accesso per l'identificazione?
Provare doctor_id
invece di doctor.id
, una query di database meno :)
0 per risposta № 2
Ho scoperto dov'era il mio errore:
Ho avuto un cattivo accesso in Employee
classe
class Employee < ActiveRecord::Base
...
def is_doctor= val
create_doctor if val == "1"
end
...
end
Stava cercando di creare un nuovo dottore, ma è colpa dell'aggiornamento. Successivamente, l'attributo id del dottore in "self" -object era vuoto.
La soluzione consisteva nel posizionare le manipolazioni dell'associazione in un'altra after_save
richiama:
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