railsのacts_as_taggableで簡単にtagging実装

http://dema.ruby.com.br/articles/2005/08/27/easy-tagging-with-rails
今流行のtag付け。最近のWebアプリケーションはネコも杓子もタグ!とりあえず便利そうだから付けとけ!って感じでどうでもいいところまでタグが実装されてたりすることもあって何だかなぁ、って感じだったりもするんだけどそれは置いといて。
どんな風に使えるのかというと、上記記事に書いてあるまんまで

class Photo < ActiveRecord::Base
  acts_as_taggable # これ一行追加するだけ
end

elephant = Photo.find(4437) # idが4437のphotosテーブルのデータを取得
elephant.tag 'zoo animals nature' # tagをspace区切りで設定。なおphotosテーブルにはtagsフィールドは無く、tagsテーブルにzoo animals natureという名前のフィールドが作成、または選択される

elephant.tagged_by?('urban') # => false
elephant.tags.size # => 3
elephant.tag_names # => [ 'zoo', 'animals', 'nature' ]

とするだけでタグ機能が使えるというもの。簡単すぎだねー。デフォルトではtagsテーブル(モデルクラスとしてはTag)のnameテーブルに設定したタグが保存される。
RailsにはActiveRecord::Actsモジュール(ただのnamespaceのためだけに定義してるモジュール)の中にActsと云うモデルを特定のデータ構造として振る舞わせよう、って仕組みがあって。んですでにRailsにはacts_as_* ってのがいくつかある*1。今までは「へー、こういう使い方もできるんだ」程度にしか考えて無かったんだけど、このacts_as_taggableの実装を見て目から鱗。便利すぎるのでこれからはもっと活用していこう。

*1:伊達さんの acts_as_* メモ - Don'tStopMusic(2005-08-28) でいろいろ紹介されてる