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

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

class Employee < ActiveRecord::Base
  has_many :projects
end

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

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

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

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

Любые мысли будут оценены.

1 ответ

Решение

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

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

Другие вопросы по тегам