Rails でタグ機能を実現する

はじめに

Rails プラグインの acts_as_taggable_on_steroids を使えば、タグ機能を簡単に実現できる。

導入方法

まず、次のコマンドを実行してプラグインをインストール。

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

そして、次のコマンドを実行してマイグレーション用ファイルを作成。

ruby script/generate acts_as_taggable_migration

最後に次のコマンドを実行して必要なテーブルを作成する。データベースには SQLite3 を使用。

rake db:migrate

利用方法

モデルにタグ機能を追加する

モデルクラスに1行追加するだけ。

class Entry < ActiveRecord::Base
  acts_as_taggable
end
モデルオブジェクトにタグを設定する
@entry.tag_list = "shopping"

これだけ。簡単。
複数のタグを付ける場合はデリミタで区切る。

@entry.tag_list = "shopping, book"
モデルオブジェクトに設定されているタグを取得する

tag_list から取得できる。

tags = @entry.tag_list

配列で取得するので注意。

タグの付いているモデルオブジェクトをデータベースから取得する

acts_as_taggable を記述したモデルに、find_tagged_with メソッドが追加されているので、それを利用する。

tags = Entry.find_tagged_widh("shopping")

普通の find と同じく、:order や :condition が使える。
また、複数のタグを指定することもできる。

tags = Entry.find_tagged_with("shopping, book")

ただし、この場合は「指定したタグのいずれかに該当するもの」が返ってくる。
指定したタグが全て付いているものを取得したい場合は

tags = Entry.find_tagged_with("shopping, book", :match_all => true)

とすればいい。

まとめ

プラグインを導入して、モデルに acts_as_taggable の1行を追加するだけで、タグ機能の大半が実現出来てしまう!