
互いに関連を持つ User, Profile があるとして,ある User を主体として Profile#job を得るには user.profile.job とする必要があります.
ですが,単に user.job とアクセスしたいと思うこともあるでしょう.
class User < ActiveRecord::Base
belongs_to :profile
def job
profile.try(:job)
end
endということで, User#job メソッドを定義しました.
しかし,この場合は,次のように移譲を用いることで解決することができます.
class User < ActiveRecord::Base
belongs_to :profile
delegate :job, to: :profile
endただ, user.profile が存在しない場合(user.profile==nilの場合), NoMethodError になりますね.
移譲先のオブジェクトにアクセス可能であることが保証できない場合,`allow_nil`オプションを指定することでこれを解決できます.
class User < ActiveRecord::Base
belongs_to :profile
delegate :job, to: :profile, allow_nil: true
end