访问父对象属性的“rails方式”是什么?

时间:2012-10-14 02:23:45

标签: ruby-on-rails ruby activerecord model

假设我有一个模型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来获得某种包罗万象的方法?

2 个答案:

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