最近下载一个rails blog应用(Simplelog)并把它里面的acts_as_taggable plugin改为Acts As Taggable On Steroids,因为在rails2.0下总是运行出错.
1.安装
ruby script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids
2.建立数据
生成migration:
ruby script/generate acts_as_taggable_migration
生成数据:
rake db:migrate
3.应用:
假如有个Post Model,添加acts_as_taggable到Post里面:
class Post < ActiveRecord::Base
acts_as_taggable
......
end
使用acts_as_taggable提供的方法(tag_list, tag_list=):
p = Post.find(:first)
p.tag_list # []
p.tag_list = "hebe, selina"
p.save
p.tag_list # ["hebe", "selina"]
或者:
p.tag_list.add("selina", "hebe")
p.tag_list.remove("ella")
4.查找tag对象
Post.find_tagged_with('Hebe, Selina')
find_tagged_with默认查找任何给定的标签,如果要查找完全符合指定的标签,可用:
Post.find_tagged_with('Hebe, Selina', :match_all => true)
5.获取tags
因为我们指定acts_as_taggable到Post mdel,所以可以通过以下语句获取所有的Post标签:
Post.tag_counts
如果想指定某个用户的所有Post的所有标签:
User.find(:first).posts.tag_counts #User与Post已设定关联
Acts As Taggable On Steroids还提供一个TagsHelper:
首先在ApplicationHelper包含TagsHelper:
module ApplicationHelper
include TagsHelper
end
然后是Controller:
class PostController < ApplicationController
def tag_cloud
@tags = Post.tag_counts
end
end
and than View:
<% tag_cloud @tags, %w(css1 css2 css3 css4) do |tag, css_class| %>
<%= link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class %>
<% end %>
6.标签Caching
使用标签caching可以提高请求的执行效率.要使用标签caching,必须增加一个叫cached_tag_list的字段,且默认值是null,而不是空字符.
class CachePostTagList < ActiveRecord::Migration
def self.up
add_column :posts, :cached_tag_list, :string
end
end
class Post < ActiveRecord::Base
acts_as_taggable
# 默认字段名是: cached_tag_list, 不过也可以改变:
set_cached_tag_list_column_name "my_caching_column_name"
end
注意:如果你建立tag,或者追加tag到关联的Post.那么被caching的标签是不会更新的,
必须调用save_cached_tag_list方法.