8

假设我有一个模型Doctor和一个模型Patient。一个Patient belongs_to a Doctor

ADoctor有一个属性office

我想,给定一个Patient p,能够说p.office和访问officep医生。

我总是可以写一个方法

class Patient
    belongs_to :doctor
    def office
        self.doctor.office
    end

但是有没有更自动的方式来将所有的Doctor属性方法暴露给Patient? 也许使用method_missing某种包罗万象的方法?

4

2 回答 2

8

您可以使用委托

class Patient
    belongs_to :doctor
    delegate :office, :to => :doctor
end

您可以在一个委托方法中有多个属性。

class Patient
    belongs_to :doctor
    delegate :office, :address, :to => :doctor
end
于 2012-10-14T02:44:34.357 回答
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
于 2012-10-14T02:43:33.807 回答