Плагин 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'])
Возможно, вы сможете расширить это, чтобы выполнить различные подсчеты, которые вы ищете.