2009-11-16 1 views
1

J'utilise acts_as_taggable pour créer un nuage de tags pour mon application. J'ai un modèle 'Question' qui utilise le plug-in acts_as_taggable. Je veux fondamentalement filtrer les tags pour le modèle de question.undefined_method 'tag_count' en utilisant acts_as_taggable_on_steroids

J'ai aussi un modèle 'Sujet'. Ainsi, la relation entre les sujets et les questions est qu'un sujet a beaucoup de questions et qu'une question appartient à un sujet.

Alors quand j'appelle @subject.questions.tag_counts, ça marche très bien. Mais dis que j'appelle @subject.free_questions.tag_counts, où free_questions est une méthode que je l'ai définie, cela donne un moi un « undefined_method tag_counts pour #<Array>. Je veux essentiellement trouver toutes les balises pour un sous-ensemble des questions.

Quelqu'un peut-il suggérer ? une solution de contournement

Répondre

3

il peut aider à mettre en œuvre free_questions comme named_scope afin que vous puissiez appeler des méthodes d'association sur elle

Quelque chose comme:.

class Question < ActiveRecord::Base 
    named_scope :free, :conditions => {:free => true} # conditions that make a question 'free' 
end 

Ensuite, vous pouvez:

@subject.questions.free 

et je pense que cela peut fonctionner aussi bien. (Ne pas avoir beaucoup d'expérience avec acts_as_taggable)

@subject.questions.free.tag_counts 

Lorsque vous utilisez un named_scope (au lieu d'une méthode de modèle que vous avez défini) vous revenez un objet proxy qui ressemble et agit comme un Array, mais vous permet d'associer les méthodes d'association ActiveRecord à cet objet. Toutes les méthodes qui fonctionnent sur @subject.questions vous devriez être en mesure d'appeler @subject.questions.free.

+0

Salut merci beaucoup! Aurait dû penser à des portées nommées plus tôt! À votre santé! –