Ferrovia plug acts_as_taggable_on: attraverso
-
01-10-2019 - |
Domanda
Ho due modelli:
class Employee < ActiveRecord::Base
has_many :projects
end
class Project < ActiveRecord::Base
acts_as_taggable_on :skills, :roles
end
Mi piacerebbe trovare dipendenti che utilizzano i tag associati ai loro progetti. Il Geokit-rails supporti di plugin un concetto simile, utilizzando il suo ': attraverso'. Rapporto
Idealmente, mi sarebbe in grado di:
- specificare quali tag (cioè competenze, ruoli) dovrebbe essere incluso nelle condizioni
- Per i dipendenti per il numero totale di progetti con tags
- essere in grado di accedere al conteggio corrispondenza-tag per ogni dipendente ai fini della costruzione di una tag cloud
Ogni pensiero sarebbe apprezzato.
Soluzione
Non sono sicuro gli atti-come-oggetto di tag-on ha il supporto per quello che stai cercando direttamente. Tuttavia, si potrebbe essere in grado di arrivare a quello che vuoi sapere che il metodo acts_as_taggable_on aggiunge due rapporti has_many
al vostro modello Project
. Ad esempio, per trovare i dipendenti in cui le competenze del progetto ha alcuni tag è possibile scrivere
Employee.all(:joins => {:projects => :taggings}, :conditions => ['taggings.context = ? and taggings.tag_id in (?)', 'skills', [4, 8, 15, 16, 23, 42])
Naturalmente questo richiede la conoscenza gli ID dei tag a cui è interessato, invece se si hanno i nomi delle variabili poi
Employee.all(:joins => {:projects => :base_tags}, :conditions => ['taggings.context = ? and tags.name in (?)', 'skills', ['skill_a', 'skill_b', 'skill_c'])
Si potrebbe essere in grado di espandere che a fare i diversi conteggi che stai cercando pure.