delegate

delegateは委譲という意味で横流しにするイメージ。
やっていることはラッパーの自動生成な感じ。

class Greeter < ActiveRecord::Base
  def hello
    'hello'
  end

  def goodbye
    'goodbye'
  end
end

class Foo < ActiveRecord::Base
  belongs_to :greeter
  delegate :hello, to: :greeter, allow_nil: true
end
Foo.find(1).greeter.try(:hello)

で呼び出せるけどdelegateを定義しているので次のように呼べる。

Foo.find(1).hello

delegateは2つのモデルを介することとかができたりするし、移譲先を変えるだけで呼び先がかわるのでviewとかでの修正いらなくなるし、tryメソッドが不要になるしたまに使うといい気がする。
prefixをつけると定義されているメソッドの場所探しで新人がハマりそうだなとは若干思った。
デメテルの法則なんやねんて感じだけどそういうことらしい。

http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%A1%E3%83%86%E3%83%AB%E3%81%AE%E6%B3%95%E5%89%87
http://maeshima.hateblo.jp/entry/20101031/1288539329