属性の別名を作成するやり方

Google で alias_attribute を検索しても日本語のページが6件しか引っかからないので一応メモしてみる。

クラスの属性に別名をつけたい場合のために、ActiveSupport では Module#alias_attribute というメソッドが用意されている。
たとえば、ブログの記事を保持する posts テーブルに subject というカラムがあるんだけど、あとから title という名前でも参照したくなった、という場合は下のようにする。

class Post < ActiveRecord::Base
  alias_attribute :title, :subject
end

これだけ。alias や alias_method に対するメリットは

  • alias は「その時点での」名前に対する別名を作成するので、先に「元のメソッド」が定義されている必要がある。なので、上の ActiveRecord のように動的に定義される属性には使えない(使えるのは、attr_accessor とか belongs_to とかを書いた後だけ)。
  • 指定した名前の別名メソッドだけを定義する alias_method と違って、「属性としての別名」を定義するので、元の属性で利用できた「新しい属性名=(value)」「新しい属性名?」メソッドも同じように使えるようになる。

この alias_attribute はRailsAPIドキュメントには出てこないメソッドなんだけど、別名をつけたいなぁと思ったときに「絶対必要なので既にあるはずだ」と思ってちょっと探したらやっぱりあったという物。Railsではこういうのが良くあるのが嬉しい。

それにしても、あまりにも日本語ページが少ないような……実は、ほかに良いやり方があってみんなそっちを使っているんだろうか。初心者なのでよくわかりません!