--- layout: old_post title: Rails Pluginのacts_as_taggableが機能追加されてる permalink: /tatsuya/show/306-rails-plugin-acts-as-taggable ---

acts_as_taggable を利用してこのブログにタグ機能を付けてる(del.icio.usからのだけ)、ふと order by create_date desc を設定したいと思いついた。でも現状のVer.じゃあできないじゃん、しょぼーん;)と思って最新版を調べたらどうも色々と機能追加されてるみたい。

ActsAsTaggablePluginHowto in Ruby on Rails

「acts_as_taggableの開発が進まないから有志で開発した改良版だ」というようなことが書いてある気もするけど違うかも。既存のVer.を使用してたのでアップデートした(既存Verのインストール

rm -rf vender/plugin/acts_as_taggable
ruby script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids/

アップデート完了、order byを付ける修正

//Old
@posts = Post.find_tagged_with(params['tag'])
//New
@posts = Post.find_tagged_with(params['tag'],{:order=>"create_date desc"})

うむうむ、動作確認OK。:orderの他に :conditions なんかもOKみたい。詳細は上のリンク先を読むとして、ざっくり新機能としては以下

find_tagged_with メソッドが各種オプション対応
order、conditions、limitに対応?色々凝ったことができる

>> Post.find_tagged_with("web",{:order=>"create_date desc", :limit=>3})
=> [#<Delpost:0x268307c @attributes={"body"=>"<div><div><a href=.........

tags_count メソッドを追加、タグ名毎に集計してくれる。
orderやconditions指定も可能。countプロパティに集計数が入る

>> Post.tag_counts(:order=>"create_date desc")
=> [#<Tag:0x26680c4 @attributes={"name"=>"Spotlight", "id"=>"90", "count"=>"12"}>,#<Tag:........

Tag.delimiterenvironment.rbで設定することで区切り文字を変更
Tag.delimiter = "," でカンマ区切りとか

tags_countメソッドでカウント数が取れるようになったのは嬉しい、これまでfind_by_sqlでごりごりSQLを書いていたけど凄いコードが綺麗になった。タグクラウドにするしか無いよね、ということでタグリストをタグクラウド風にしてやった、満足、満足。