铁路插件acts_as_taggable_on:通过

时间:2010-04-24 20:45:19

标签: ruby-on-rails ruby-on-rails-plugins acts-as-taggable

我有两种模式:

class Employee < ActiveRecord::Base
  has_many :projects
end

class Project < ActiveRecord::Base
  acts_as_taggable_on :skills, :roles
end

我想找到员工使用与他们的项目相关联的标签。 geokit-rails插件使用':through'关系支持类似的概念。

理想情况下,我能够:

  • 指定条件中包含哪些标签(即技能,角色)
  • 按照匹配标记的项目总数对员工进行排序
  • 能够访问每位员工的匹配标签计数,以构建标签云

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

我不确定act-as-taggable-on是否支持您直接寻找的内容。但是,您可以知道acts_as_taggable_on方法为has_many模型添加两个Project关系,从而获得您想要的结果。例如,要查找项目技能有一些标签的员工,您可以编写

Employee.all(:joins => {:projects => :taggings}, :conditions => ['taggings.context = ? and taggings.tag_id in (?)', 'skills', [4, 8, 15, 16, 23, 42])

当然,这需要知道你感兴趣的标签ID,而不是你有标签名称

Employee.all(:joins => {:projects => :base_tags}, :conditions => ['taggings.context = ? and tags.name in (?)', 'skills', ['skill_a', 'skill_b', 'skill_c'])

您可以扩展它以执行您正在寻找的不同计数。