Ruby 语言 思想驱动生活

Ruby,Rails,编程是一种乐趣。

Tag List for:

acts_as_taggable

Posted by liubin on Friday September 14 @ 19:19
Taged with: tagged and

这个世界到处都是tag
而且这个世界上好像有两个acts_as_taggable,一个是dhh的plugin版的,一个是gem版的。
比较了半天,发现还是gem版的比较好(http://rubyforge.org/projects/taggable/)。
具体来说
1.gem对于不同的要tag的对象,可以用TagsTable1s格式的表来存tag和对象的关系,比如photo的tag用photos_tags表。
plugin版的则只用一个表taggings,用taggable_type这个字段来表示tag的对象类型。
2.可以为tag关系增加属性。
plugin版的tag关系表只有3个字段(不包括id),要想给这个tag关系加其它属性则比较困难。
gem则容易多了。
gem的tag和被tag对象之间的连接表除了tagid和被tag对象id,还可以有别的属性。
在给对象加tag的时候,可以顺便更新这些属性:

  1. # We can do some interesting things with it now
  2.   person = Person.new
  3.   person.tag "wine beer alcohol", :attributes => { :created_by_id => 1 }
  4.   Person.find_tagged_with(:any => 'wine', :condition => "tags_people.created_by_id = 1 AND tags_people.position = 1")

3.统计功能
tags_count可以统计每个tag被用了多少次

  1. # Gets the top 10 tags for all photos
  2.   Photo.tags_count :limit => 10 # => { 'beer' => 68, 'wine' => 37, 'vodka' => '22', ... }

4.性能可能gem的好一点
plugin版的好像是在给一个对象加tag的时候,会吧这个对象的tag先删掉,再全部加上,性能上有点浪费。

5.容易修改
gem版的写的比较简单,很容以自己进行扩展。
6.gem版的自带一个cloud,可以根据tag的不同显示不同大小的文字。



Locations of visitors to this page


Recent Comments