Плагин Rail_in_taggable_on: через - PullRequest
       10

Плагин Rail_in_taggable_on: через

1 голос
/ 25 апреля 2010

У меня есть две модели:

class Employee < ActiveRecord::Base
  has_many :projects
end

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

Я хотел бы найти сотрудников, использующих теги, связанные с их проектами. Плагин geokit-rails поддерживает аналогичную концепцию, используя отношение «: through».

В идеале я бы смог:

  • укажите, какие теги (т.е. навыки, роли) будут включены в условия
  • упорядочить сотрудников по общему количеству проектов с соответствующими тегами
  • иметь возможность доступа к количеству совпадающих тегов для каждого сотрудника в целях построения облака тегов

Любые мысли приветствуются.

1 Ответ

1 голос
/ 25 апреля 2010

Я не уверен, что в Actions-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])

Конечно, это требует знания интересующих вас идентификаторов тегов, вместо этого, если у вас есть имена тегов, тогда

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

Возможно, вы сможете расширить это, чтобы выполнить различные подсчеты, которые вы ищете.

...