Let's say I have a model Doctor, and a model Patient. A Patient belongs_to a Doctor. 
A Doctor has an attribute office.
I would want to, given a Patient p, be able to say p.office and access the office of p's Doctor. 
I could always write a method
class Patient
    belongs_to :doctor
    def office
        self.doctor.office
    end
But is there a more automatic way to expose all of the Doctor's attribute methods to the Patient? Perhaps using method_missing to have some kind of catch-all method?
You could use delegate.
class Patient
    belongs_to :doctor
    delegate :office, :to => :doctor
end
You could have multiple attributes in one delegate method.
class Patient
    belongs_to :doctor
    delegate :office, :address, :to => :doctor
end
                        I believe you are talking about using Patient as a delegator for Doctor.
class Patient < ActiveRecord::Base
  belong_to :doctor
  delegate :office, :some_other_attribute, :to => :doctor
end
I think this would be the method_missing way of doing this:
def method_missing(method, *args)
  return doctor.send(method,*args) if doctor.respond_to?(method)
  super
end
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With