私が話していることの例:
class Person < ActiveRecord::Base
def name=(name)
super(name.capitalize)
end
def name
super().downcase # not sure why you'd do this; this is just an example
end
end
これはうまくいくようですが、私はちょうど属性メソッドのオーバーライドに関するセクションを読んだばかりですActiveRecord::Base ドキュメントread_attribute
、およびメソッドの使用を提案していますwrite_attribute
。上記の例で私が行っていることは何か間違っているに違いないと思いました。そうでなければ、なぜこれらのメソッドが属性メソッドをオーバーライドする「正しい方法」として認められるのでしょうか? また、はるかに醜い慣用句を強制しているので、正当な理由があるに違いありません...
私の本当の質問は、この例に何か問題があるのかということです。
ベストアンサー1
Gareth のコメントに同意します... コードは記述どおりには動作しません。次のように書き直す必要があります。
def name=(name)
write_attribute(:name, name.capitalize)
end
def name
read_attribute(:name).downcase # No test for nil?
end