使用Acts As Taggable On Steroids定义标签
最近下载一个rails blog应用(Simplelog)并把它里面的acts_as_taggable plugin改为Acts As Taggable On Steroids,因为在rails2.0下总是运行出错.
1.安装
2.建立数据
生成migration:
生成数据:
3.应用:
假如有个Post Model,添加acts_as_taggable到Post里面:
使用acts_as_taggable提供的方法(tag_list, tag_list=):
或者:
4.查找tag对象
find_tagged_with默认查找任何给定的标签,如果要查找完全符合指定的标签,可用:
5.获取tags
因为我们指定acts_as_taggable到Post mdel,所以可以通过以下语句获取所有的Post标签:
如果想指定某个用户的所有Post的所有标签:
Acts As Taggable On Steroids还提供一个TagsHelper:
首先在ApplicationHelper包含TagsHelper:
然后是Controller:
and than View:
6.标签Caching
使用标签caching可以提高请求的执行效率.要使用标签caching,必须增加一个叫cached_tag_list的字段,且默认值是null,而不是空字符.
注意:如果你建立tag,或者追加tag到关联的Post.那么被caching的标签是不会更新的,
必须调用save_cached_tag_list方法.
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方法.
莫愁前路无知己,天下无人不识君。