使用Acts As Taggable On Steroids定义标签

最近下载一个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方法.

你可能感兴趣的:(css,SVN,Ruby,Rails,ActiveRecord)