2010-05-27 9 views
0

Ainsi, dans un autre contrôleur, j'utilise une trouvaille comme ceci:Trouver un taggable_type spécifié avec actes-as-tagable sur

@entries = Entry.find(:all, :conditions => ['live = ?', false]) 

pour trouver toutes les entrées avec une fausse colonne « en direct ».

Dans mon projet, j'utilise deux types de taggable différents, un pour les entrées (Entrée) et un pour les messages (Message). Après avoir regardé mon code essayé et vrai ci-dessus, vous pourriez penser que je pourrais faire quelque chose de similaire pour trouver tous les messages étiquetés avec la valeur "Message" dans la colonne taggable_type de la table taggings.

#this could help find only Messages with the taggable_type column value "Message" 
@tagged_messages = Message.find(:all, :conditions => ['taggable_type = Message', true]) 

Le problème ici est que ma condition de trouver des adresses le modèle de message [Message.find (...] Ce qui ne fonctionne pas parce que [je crois comprendre] la table n'a pas marquages ​​un modèle associé. J'ai probablement tort, alors comment puis-je rechercher une table qui n'est pas associée à un modèle? Je manque probablement quelque chose ici.J'apprécierais grandement toute aide ou code qui m'aiderait à comprendre cela ou aider à obtenir ce travail. pour la lecture de ma question.

Répondre

1

@tagged_messages = Tagging.find_all_by_taggable_type('Message').map(&:taggable) devrait faire ce que vous voulez. vous pourriez avoir besoin de jeter un uniq là quelque part aussi bien.

+0

Merci beaucoup. Je n'étais pas au courant de .map() – BasicObject

+2

Jetez un oeil au module Enumerable. Il a plusieurs choses intéressantes comme 'map'. La classe array contient des choses amusantes qui peuvent aussi faciliter la vie. De plus, si vous connaissez le nom d'une classe sur laquelle vous devez passer des appels, mais qu'il s'agit d'une chaîne, vous pouvez la transformer en vraie classe avec 'constantize' dans Rails ou' Kernel.const_get' dans Ruby. par exemple. 'foo =" Message "; foo.constantize.find (1) ' – x1a4