2009-05-26 6 views
1

Je ne peux pas obtenir des rails pour retourner les recherches combinées ('AND') sur les tables de jointure associées d'un objet.Rails combinés ('AND') recherches sur les tables de jointure associées

E.g. J'ai des livres qui sont dans les catégories. Disons: Livre 1: est dans la catégorie 5 et 8

Mais je ne peux pas obtenir 'AND' pour filtrer les résultats en utilisant la table de jointure? Par exemple :: ->

classe Livres has_and_belongs_to_many: catégories: join_table => "book_categories"

Book.find: tous,: conditions => "book_categories.category_id = 5 ET book_categories.category_id = 8" ,: include => "catégories" ... renvoie nil (pourquoi ne renvoyez pas tous les livres qui sont à la fois 5 & 8 ??)

Cependant: 'OR' fonctionne:

livre .find: all,: conditions => "book_categories.category_id = 5 O R book_categories.category_id = 8 " ... retourne tous les livres de la catégorie 5 et 8

Il me manque quelque chose?

Répondre

2

Le problème est au niveau SQL. Cette condition s'exécute sur une ligne de table de liens, et aucune ligne de table de lien individuelle ne peut avoir un category_id des 5 et 8. Vous voulez vraiment séparer les lignes de table de liens pour avoir ces ID. Essayez de regarder dans named_scope de Rails, en particulier la partie qui permet le filtrage avec un lambda (de sorte que vous pouvez prendre un argument). Je ne l'ai jamais essayé moi-même, mais si je devais implémenter ce que vous cherchez, c'est ce que je rechercherais.

+0

Oui, vous voulez un résultat si l'identifiant de la catégorie est 5 OU 8, car il ne peut jamais être simultanément 5 ET 8. –