2.0でタグ付け(taggingとも言うのかな)

2.0でacts_as_taggableを使おうと思ってハマりました。
2.0では

  • gemのacts_as_taggableが動かない
  • pluginの方もなんだかうまく動かない

というわけで、2.0にはacts_as_taggable_on_steroidsがよさげです。
http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids
まず、インストール

./script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids

次にmigrationファイルを作成します。

./script/generate acts_as_taggable_migration

migrationを実行して、テーブルを作成します。

rake db:migrate

次に、モデルの中で定義します。

class Post < ActiveRecord::Base
  acts_as_taggable
end

この1行で次のような使い方ができるようになります。

p = Post.find(:first)
p.tag_list # []
p.tag_list = "Funny, Silly"
p.save
p.tag_list # ["Funny", "Silly"]
p.tag_list.add("Great", "Awful")
p.tag_list.remove("Funny")

さらに検索も便利です。

Post.find_tagged_with('Funny, Silly')

これだと、FunnyかSillyのどちらかにヒットしたレコードが取得できます。

Post.find_tagged_with('Funny, Silly', :match_all => true)

これだと、FunnyとSillyの両方にタグ付けされているレコードが取得できます。