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