ActiveRecordでデフォルトの値を指定する

Overriding attributes in ActiveRecord

class Account < ActiveRecord::Base
  def notification_address
    super || email_address
  end
end

notification_addressにデータが無い場合、email_addressを返すというサンプル。これがうまく動くのは、superメソッドを呼ぶとActiveRecord::Base#method_missingが呼ばれて、レコードデータを取得しに行くから。という理解でいいのかわからないけど。これがうまく動くなら使ってみようかなと思ったので、ひとまずメモ。

しかし・・・見た目は奇麗だけど、挙動が良くわからない人にとってはちょっとトリッキーなテクニックにも思える。これについての議論が元記事のコメントにいろいろあった。(自分では読んでないけど。)

自分としてはどちらかというと、初心者でも理解しやすいコードを書くべきかなと思う。他人とコードを共有する場合は特に。なのでやっぱりこの書き方はどうかなぁ、見た目美しいし格好いいけど。Rubyistからしたら何も問題無い書き方だけど、そうで無い人にはちょっと敷居が高くなってしまう。