acts_as_taggable_reduxのtag_listメソッド

以前、以下のエントリーにて結構いじって自分用にカスタマイズしたacts_as_taggable_reduxだけど、昨日、ふと気づいたのでさらに修正。

(以前のエントリー: http://d.hatena.ne.jp/yotena/20071217/1197901746

動きとしては修正後のほうが正しいと思う。たぶん普通の人にとっては...。

オリジナル

def tag_list(user = nil)
  unless user
    tags.collect { |tag| tag.name.include?(" ") ? %("#{tag.name}") : tag.name }.join(" ")
  else
    tags.delete_if { |tag| !user.tags.include?(tag) }.collect { |tag| tag.name.include?(" ") ? %("#{tag.name}") : tag.name }.join(" ")
  end
end

修正後

def tag_list(user = nil)
  unless user
    tags.uniq.collect { |tag| tag.name.include?(" ") ? %("#{tag.name}") : tag.name }.join(" ")
  else
    taggings.find(:all, :conditions=>['user_id=?', user.id]).map { |tagging| tagging.tag }.uniq.collect { |tag| tag.name.include?(" ") ? %("#{tag.name}") : tag.name }.join(" ")
  end
end

その他の改造部分については、以下参照

http://d.hatena.ne.jp/yotena/20071217/1197901746