class Prescription < ActiveRecord::Base
belongs_to :user
validates :time, presence:true
validates :user_id, presence:true
#I want to access an attribute from the user model, but this does not work:
num = self.user.mobilephone
END
正如您所看到的,我正在使用ActiveRecord并拥有belongs_to
关联,因此不应该轻松访问用户属性吗?
答案 0 :(得分:2)
是的。
p = Prescription.find(1) # Assuming you have a record with an ID of 1
p.user.first_name #=> "Fred" Assuming you have a field in user called first_name
您也可以在模型中引用您的用户
class Prescription < ActiveRecord::Base
def user_full_name
"#{self.user.first_name} #{self.user.last_name}"
end
end
所以真正的问题是Rails是如何做到这一点的?答案是元编程。元编程是ruby中的一个复杂主题。简单地说,元编程允许类和对象在运行时添加方法。当您的模型加载时,它会看到您拥有属于用户定义的属性。然后,这将在上面的示例中创建.user方法。它自己的方法将返回与当前Prescription对象关联的User模型实例。其他活动记录方法也会执行类似的操作,例如has_many,has_one和has_and_belongs_to_many。