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
で処理してるんだと思う.