タグをユーザーごとに管理したいんだけど、acts_as_taggable_on では出来ないんだろうな、って勝手に思い込んでいたら、ReadMe に方法書いてあった。英語だからって拒否反応起こしてないで、ちゃんと ReadMe ぐらい読んでおけよ、自分。
ReadMe に書いてあること忘れそうなので、方法をブログにメモしておく。
タグを付けたいクラスを用意する
class Entry < ActiveRecord::Base acts_as_taggable belongs_to :user ... end
ユーザークラスを修正する
class User < ActiveRecord::Base ... # 追加 acts_as_tagger end
タグを付けるとき
class EntriesController < ApplicationController ... def create @entry = Task.new(params[:task]) @entry.user = current_user @entry.save current_user.tag(@entry, :with => params[:tag_list], :on => :tags) respond_with @entry end ... end
:with に指定しているのは、タグ文字列。
:on で指定しているのは、acts_as_taggable_on で宣言したときに指定した名前(?)。acts_as_taggable で宣言したときは、デフォルトで tags になるんだけど、ここではいちいち指定しないといけない。
ユーザーが付けたタグを取得するとき
class EntriesController < ApplicationController ... def show @entry = Entry.find(params[:id]) # ログインユーザーが付けたタグを取得 @tags = @entry.tags_from(current_user) respond_with @entry end ... end