我有两个型号:

class Employee < ActiveRecord::Base
  has_many :projects
end

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

我想找到使用与其项目相关的标签的员工。 Geokit-Rails插件使用其“:通过”关系支持类似的概念。

理想情况下,我将能够:

  • 指定在条件中包括哪些标签(即技能,角色)
  • 按照带有匹配标签的项目总数订购员工
  • 能够访问每个员工的匹配标签计数,以构建标签云

任何想法都将不胜感激。

有帮助吗?

解决方案

我不确定Acts-As Taggggable-On是否可以直接寻找您的目标。但是,您可能能够知道知道ACTS_AS_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'])

您也许可以将其扩展到您正在寻找的不同计数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top