Delegation be enhance by active support in module

基本思想是:

  • 当访问一个对象的方法时,如果这个方法不存,则转发这个方法给委托的对象
  • Delegation is particularly useful with Active Record associations:
class Greeter < ActiveRecord::Base
  def hello
    'hello'
  end

  def goodbye
    'goodbye'
  end
end

class Foo < ActiveRecord::Base
  belongs_to :greeter
  delegate :hello, to: :greeter
end

Foo.new.hello   # => "hello"
Foo.new.goodbye # => NoMethodError: undefined method `goodbye' for #<Foo:0x1af30c>