我有两个相关的模型,员工和医生:
class Employee < ActiveRecord::Base
has_one :doctor, :dependent => :destroy
...
end
class Doctor < ActiveRecord::Base
belongs_to :employee
end
当医生已经创建并保存时 我希望能够访问员工after_save回调中的医生ID:
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
我可以访问任何医生方法,其中任何一种都可以正常工作,但“id” - 它返回“nil”。
我做错了什么?
答案 0 :(得分:0)
你的Doctor模型是否有id访问器?
尝试使用doctor_id
代替doctor.id
,减少一个数据库查询:)
答案 1 :(得分:0)
我发现了我的错误所在:
我在Employee
类
class Employee < ActiveRecord::Base
...
def is_doctor= val
create_doctor if val == '1'
end
...
end
它试图创建一名新医生,但它在更新操作时出错。在那之后,'self'-object中的医生id属性是空的。
解决方案是将关联操作置于另一个after_save
回调:
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