14
3 月
09

Ruby on Railsで高度なタグ管理を実現しよう(仮)

どもども。calcsです。
最近なんだかRoRネタが多いですな、このブログ。いや、ぶろぶか。

まぁそれはそうとタグ。Web2.0とかいうBuzzWordがはやってからこちら、コンテンツのカテゴライズはディレクティブではなくタギングが主流になってきた感がございます。

で、RoRでタグをつけようと思うと真っ先に出てくるのがacts_as_taggable_on_steroids。
まぁ正直タギングぐらい自前で実装しても大した手間ではないんですが、どうせ誰が作っても似たようなデータ構造を採用することになるし、だったらacts_as_taggable_on_steroidsでもいいじゃない。みたいな話になるわけです。

ただしこいつは、タグ付けだけを扱っているので、タグにそれ以上の情報を与えられない。つまり、ニコニコ動画とかpixivとかであるような、投稿者タグのような「一般ユーザには編集出来ないタグ」を作ることができないのである。基本的に。

まぁそれじゃあ困ることもあるので、acts_as_taggable_on_steroidsが自動的に作ってくれるtaggingsテーブルに、user_idとかを保存するためのカラムを作ってしまえば大体ミッション完了である。

ruby script/generate migration AddUserIdToTagging user_id:integer
rake db:migrate

こんな感じで。ただこいつをやると、AddとかRemoveとかが一部そのまま使えなくなる(使えるのは使えるが、当然UserIdを加味した挙動ではないということ)。

そんなわけでその辺はフツーに
Tagging.find(:all,:conditions=>['taggable_type=? and user_id=?','data',params[:id]])
とかしてやらねばいかんわけです。
この辺をmoduleにまとめてしまって、tag_listにmixinしてしまえば完璧です。つーかそれってプラグインですが。

ただこの辺、権限の扱いがサイトによってビミョーに異なるので、一般的なプラグインとしてまとめにくいところ。うむむ。だれか汎用的なプラグインにしてー

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加




  1. 1    acts_as_taggable_on_steroidsのuser_id追加について 10 月 1, 2009 at 4:55 pm

    初めまして、ちょっと悩んでいるので教えてください。。

    >そんなわけでその辺はフツーに
    >Tagging.find(:all,:conditions=>['taggable_type=? and user_id=?','data',params[:id]])
    >とかしてやらねばいかんわけです。

    userのidをタグの追加の所で実装するには
    具体的にどこの部分を変更なさったのかご教示頂けないでしょうか?

    アドインなので、中を見ながら考えてはいるのですが
    明示的にIDを追加する命令を追加したらいいのか
    判らず、悩んでいます。。。

    お忙しい中恐れ入りますが、よろしくお願いします。


コメントください