RailsでUserモデルがあってそれがnameという属性を持っているとする. このとき例えば, User#nameの値を条件fooによって変えたいとき,
class User < ActiveRecord::Base
def name
foo ? self[:name] : 'some special value'
end
end
のようにnameメソッドを上書きしてやればよい.
ちなみにself[:name]の[]はread_attributeのaliasで, 別にwrite_attributeもあるらしい(参考).
※ 上書きというよりは先に定義していると言った方が正確だと思う. というのもaround aliasを使って
class User < ActiveRecord::Base
alias :org_name :name
def name
foo ? org_name : 'some special value'
end
end
のように定義しようとするとねーむってなぁに?って怒られるからだ. 多分(確認すればいいのだけど), method_missingで処理してるんだと思う.