あるオブジェクトがメッセージを受け取った(メソッドが呼び出された)とき、実際の処理を他のオブジェクトに委ねることを“委譲(delegate)”と呼びます。RailsではModuleクラスのdelegateメソッド*1によって、委譲を簡単に実現することができます。
class BranchOffice
attr_accessor :head_office
delegate :address, :main_switchboard, :to => "@head_office"
end
delegateに続いて委譲したいメソッドを列挙し、最後に移譲先となるオブジェクトを:toで指定します。このとき、移譲先となるオブジェクトを文字列で指定するのがポイントです。この文字列はメソッド定義に利用されるので、オブジェクトを返せば任意のコードを書くことができます。
class User
belongs_to :account
delegate :nickname, :gender, :age :to => "account"
end
関連を使って、関連先のオブジェクトに委譲することもできます。