Rails3 でタグ機能の実装

Rails を使った開発で、アプリにタグ機能を実装する場合、これまでは acts-as-taggable 系のプラグインが定番でした。acts-as-taggable とか acts-as-taggable-on とか、acts-as-taggable-on-steroid とか。まだあった気がする。

で、今回 Rails3 で開発しているアプリにタグを付けるために、対応状況を調べてみたんですが、残念なことに現時点で Rails3 にちゃんと対応しているのは acts-as-taggable-on だけでした。対応しているプラグインが1つあるだけでも恩の字ですけど。他のは GitHub にリポジトリはあるものの、更新が滞っているものばかりでしたから。

あと、調べる前は期待していなかったんですが、なんと acts-as-taggable-on はジェネレータだけでなく、スコープにも対応していました。嬉しい誤算です。タグで絞り込んで、さらに kaminari でページング、なんてことが出来るのでなかなかステキ。

以下、作業メモ。

Gemfile に追加

gem "acts-as-taggable-on"

gem をインストール

bundle

マイグレーション

rails g acts_as_taggable_on:migration
rake db:migrate

モデルを修正

class Book < ActiveRecord::Base
  acts_as_taggable
end

タグで検索

@books = Book.tagged_with("test")

モデルで使用されているタグを取得

@tags = Book.tag_counts

タグを使用されている順に取得

@tags = Book.all_tag_counts