/ / Ottenere l'ID di associazione ActiveRecord nella funzione di callback - ruby-on-rails, ruby-on-rails-3, activerecord

Ottenere l'ID di associazione ActiveRecord nella funzione di callback - ruby-on-rails, ruby-on-rails-3, activerecord

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 № 1

Il 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