假设我有一个模型Doctor
和一个模型Patient
。一个Patient belongs_to a Doctor
。
Doctor
的属性为office
。
我希望,Patient p
能够说出p.office
并访问office
的{{1}}医生。{
我总是可以写一个方法
p
但有没有更自动的方式将class Patient
belongs_to :doctor
def office
self.doctor.office
end
的所有属性方法公开给Doctor
?也许使用Patient
来获得某种包罗万象的方法?
答案 0 :(得分:8)
您可以使用 delegate 。
class Patient
belongs_to :doctor
delegate :office, :to => :doctor
end
您可以在一个委托方法中拥有多个属性。
class Patient
belongs_to :doctor
delegate :office, :address, :to => :doctor
end
答案 1 :(得分:2)
我相信你正在谈论使用Patient作为Doctor的委托人。
class Patient < ActiveRecord::Base
belong_to :doctor
delegate :office, :some_other_attribute, :to => :doctor
end
我认为这将是method_missing这样做的方式:
def method_missing(method, *args)
return doctor.send(method,*args) if doctor.respond_to?(method)
super
end