(Ruby on Rails初学者)引用模型中的另一个模型

时间:2015-12-03 02:30:10

标签: ruby-on-rails ruby activerecord

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关联,因此不应该轻松访问用户属性吗?

1 个答案:

答案 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。