1

У меня есть две модели:Rail плагин acts_as_taggable_on: через

class Employee < ActiveRecord::Base 
    has_many :projects 
end 

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

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

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

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

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

ответ

1

Я не уверен, что действия, такие как-taggable-on, поддерживают то, что вы ищете напрямую. Однако вы можете получить то, что хотите, зная, что метод act_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']) 

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

+0

Возможно, я ошибаюсь, но выполняю ee = Employee.all (: joins => {: projects =>: base_tags},: conditions => ['taggings.context =? И tags.name in (?) ',' skills ',' oracle ']) в IRB не возвращает ничего: никаких ошибок, никаких сотрудников, сообщений нет. Это должно соответствовать нескольким проектам. Я также соответствую случаю имени тега («навыки») и значения поиска («оракул»), если это имеет значение. Что мне не хватает? – craig

+0

Этот запрос дает мне одну запись профиля для каждого соответствующего проекта (например, если два проекта для профиля соответствуют тегу, вы дважды повторяете этот профиль), а не уникальный список профилей, содержащих соответствующий проект. Однако это хорошая отправная точка. Мне нужен запрос EXISTS или IN. – craig