2011-02-09 4 views
1

J'essaie d'effectuer une recherche sur plusieurs colonnes sur un modèle et ses balises associées. J'utilise metawhere et acts-as-taggable-on pour ça. Fondamentalement, j'ai un modèle avec un titre et un corps qui a une certaine quantité de tags avec des noms. J'ai essayé de définir cette requête avec metawhere mais elle ne renvoie jamais de résultats lorsque j'essaie de rejoindre les tags d'un modèle. J'ai une variable nommée « str » qui est utilisé pour rechercher un modèle post avec les éléments suivants ...Recherche de balises avec metawhere

Post.where(:title.matches % '#{str}%' | :body.matches % '#{str}%' | {:tags => [:name.matches % '#{str}%']}).joins(:tags) 

qui génère la requête SQL suivante ...

=> "SELECT `posts`.* FROM `posts` INNER JOIN `taggings` ON `posts`.`id` = `taggings`.`taggable_id` AND `taggings`.`taggable_type` = 'Post' INNER JOIN `tags` ON 'taggings.tagger_id IS NULL AND taggings.context = \\'tags\\'' WHERE (((`posts`.`title` LIKE '\#{str}%' OR `posts`.`body` LIKE '\#{str}%') OR `tags`.`name` LIKE '\#{str}%'))" 

Quelqu'un peut-il me diriger dans la bonne direction avec ça? Toute aide serait grandement appréciée.

+0

Pouvez-vous coller dans le sql qui est générée à partir de cette requête? – idlefingers

+0

J'ai oublié d'enrouler la variable str dans # {} et j'ai ajouté le sql généré à ma question initiale. – Raj

Répondre

0

Essayez: (en supposant l'opérateur sont les surcharges activées)

.where((:title =~ str) | (:body =~ str) | {:tags => [:name =~ str]}) 
+0

pour une raison quelconque, cela me donne une erreur de type incompatibilité, en disant "incompatibilité de type: chaîne donnée". – Raj

+0

J'ai oublié d'activer les surcharges de l'opérateur, maintenant je ne reçois pas cette erreur d'incompatibilité de type, mais il ne semble pas être la recherche de balises. – Raj

+0

c'est très étrange, car c'est essentiellement à partir des docs. – thomasfedb

Questions connexes