acts_as_taggable_on_steroidsとacts_as_taggable_reduxの(用途)比較


どっちが良い悪いは無しです。


acts_as_taggable_on_steroidsとacts_as_taggable_reduxのどっちを使うかについて検索するといくつかのブログが出てくるが、最初自分も選び方わからなかった。タグクラウドが簡単に作れるとかで選んでためしに使ってみたという記事が多いみたい。で、実際それだけの差じゃないと思う(や、昨日気がついたんだけどw)ので、以下、どっちを使うか決めかねているときの参考にしてください。


そのまんまだけど、その差は、Tagモデルのtaggings_countとTaggingモデルのuser_idぐらいです。migrationファイルだけ見てると「ふーん」と思ってわかった気になりがちです。でも、ER図にすれば一目瞭然なんで図も起こしました。大きな違いは、user_idだけです。結果、この2つのプラグインは、用途が変わってしまうように思います。


acts_as_taggable_on_steroidsとacts_as_taggable_reduxが生成するモデルはそれぞれ図のとおり。postsとusersテーブルは例です。



acts_as_taggable_on_steroids



acts_as_taggable_redux


acts_as_taggable_on_steroidsはPostモデルに対して、あるPostを投稿したユーザ自身が自分のPostに対してタグをつける用途になる。(普通のWordPressとかのブログなどをイメージしてもらえるといいかと。)


これに対して、acts_as_taggable_reduxの方は、だれかが投稿したPostに対して、みんな(Userモデルメンバー全員)がタグ付けをする用途になる。(イメージとしては、はてなダイアリーかなぁ)


ひとつの情報に対して複数人がタグ付けをしていくコミュニティ・情報サイトではredux(系)、ブログのように自分の投稿に関連するタグをつけておくような用途ではon_steroids(系もしくは元のacts_as_taggable系)という結果になるんじゃないかと思います。簡単な事ですが、ER図などを書いて視覚化すると良くわかります。どっちを使うか迷っている人は、参考までに。いずれにしても自分用にカスタマイズは必須です。


ちなみにtaggings_countカラムは、ActiveRecordのbelongs_toのcounter_cacheパラメータを設定してあれば、自動でモデル間の関連の数を計算してくれるというものなので、acts_as_taggable_on_steroidsとacts_as_taggable_reduxの用途を本質的に変えるものではないです。つけようと思えば、acts_as_taggable_on_steroidsにもつけられるものです。


「じゃあacts_as_taggable_on_steroidsにuser_idをつければいい!」というのは、一応ここでは無視しました。


上のお絵かきはclay(おすすめ)というeclipseプラグインを利用しました。