1

J'ai deux modèles:plug-in rail acts_as_taggable_on: par

class Employee < ActiveRecord::Base 
    has_many :projects 
end 

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

Je voudrais trouver des employés en utilisant les balises associés à leurs projets. Le plugin geokit-rails supporte un concept similaire, utilisant sa relation ': through'.

Idéalement, je serais en mesure de:

  • spécifier quelles balises (c.-à-compétences, les rôles) seraient inclus dans les conditions
  • commande les employés par le nombre total de projets avec des étiquettes correspondant à
  • être en mesure d'accéder au nombre d'étiquettes correspondantes pour chaque employé dans le but de construire un nuage d'étiquettes

Toutes les pensées seraient appréciées.

Répondre

1

Je ne suis pas sûr que l'act-as-taggable-on a un support pour ce que vous cherchez directement. Cependant, vous pourriez être en mesure d'obtenir ce que vous voulez en sachant que la méthode acts_as_taggable_on ajoute deux relations has_many à votre modèle Project. Par exemple, pour trouver des employés où les compétences du projet a quelques balises que vous pouvez écrire

Employee.all(:joins => {:projects => :taggings}, :conditions => ['taggings.context = ? and taggings.tag_id in (?)', 'skills', [4, 8, 15, 16, 23, 42]) 

Bien sûr que nécessite de connaître les balises ids qui vous intéressent, au lieu si vous avez les noms de balises puis

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

Vous pourriez également étendre cette fonction pour effectuer les différents décomptes que vous recherchez.

+0

Peut-être que je fais une erreur, mais en exécutant ee = Employee.all (: jointures => {: projets =>: base_tags},: conditions => ['taggings.context =? Et tags.name dans (?) ',' skills ',' oracle ']) à la CISR ne renvoie rien: aucune erreur, aucun employé, aucun message. Cela devrait correspondre à quelques projets. Je suis également le cas du nom de tag ('skills') et de la valeur de recherche ('oracle'), si cela est pertinent. Qu'est-ce que je rate? – craig

+0

Cette requête me donne un enregistrement de profil pour chaque projet correspondant (par exemple, si deux projets pour un profil correspondent à une balise, ce profil est répété deux fois), plutôt qu'une liste unique de profils contenant un projet correspondant. C'est un bon point de départ, cependant. Ce dont j'ai besoin est une requête EXISTS ou IN. – craig

Questions connexes