/ / Pobieranie identyfikatora powiązania ActiveRecord w funkcji wywołania zwrotnego - ruby-on-rails, ruby-on-rails-3, activerecord

Pobieranie identyfikatora asocjacji ActiveRecord w funkcji zwrotnej - ruby-on-rails, ruby-on-rails-3, activerecord

Mam dwie powiązane modelki, pracownika i lekarza:

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

class Doctor < ActiveRecord::Base
belongs_to :employee
end

Kiedy lekarz został już utworzony i zapisany.
Chcę uzyskać dostęp do identyfikatorów lekarzy w pracownikach po_zapisaniu oddzwonienia:

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

Mogę uzyskać dostęp do dowolnej metody lekarzy i każdy z nich działa dobrze, ale „id” - zwraca „nil”.
Co ja robię źle?

Odpowiedzi:

0 dla odpowiedzi № 1

Czy twój model Doctor ma akcesorium id?

Próbować doctor_id zamiast doctor.id, jedno zapytanie do bazy danych mniej :)


0 dla odpowiedzi nr 2

Dowiedziałem się, gdzie był mój błąd:

Miałem zły akcesor Employee klasa

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

Próbował utworzyć nowego lekarza, ale błąd przy aktualizacji. Następnie atrybut id lekarza w obiekcie „self” był pusty.

Rozwiązaniem było przeniesienie manipulacji skojarzeniami na innego after_save oddzwonić:

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