essayer de faire une portée dans les rails3.
:book has_many :chapters
4 Réponses :
Cela devrait vous aider à aller:
class Book
scope :long, joins(:chapters).
select('books.id, count(chapters.id) as n_chapters').
group('books.id').
having('n_chapters > 10')
end
C'est la voie à suivre. Seul le problème que je rencontre est que la méthode de comptage ne fonctionne pas vraiment comme prévu ici. Par exemple, book.long.count retourne un hachage avec le nombre de chapitres pour chaque livre, je pense. Vous devez faire book.long.all.count. Pas trop mal je suppose
Cela a l'air bien, mais je reçois une erreur: 'Colonne "Card_Count" n'existe pas' (Card_Count est mes N_Chapters). Tout par le ayant code> semble fonctionner correctement et la colonne CARD_COUNT est définitivement peuplée lorsque je l'exécute directement dans une console SQL ...
Je ne sais pas si c'est une bonne pratique de relier d'autres postes Stackoverflow. Mais j'ai un problème similaire à ce post, mais cela ne nécessite que certains attributs sur les objets HAS_MANY. J'apprécierais vraiment l'aide Stackoverflow.com/Questtions/31719184/...
AH - Pour répondre à ma propre question dans le commentaire ci-dessus, j'ai dû mettre le comptage dans l'avoir:
in rails 4.0 Cette version fonctionne. Vous devez compter () dans la clause d'avoir la clause. Il semble que la clause ne se voit pas «comme N_Chafters». P>
Une alternative est de faire une sous-requête. Bien que la jointure soit plus correcte (et cela conduit éventuellement à de meilleures performances), vous risquez de vous retrouver avec des résultats étranges si vous combinez plusieurs étendues qui essaient de regrouper. Une sous-requête est beaucoup moins intrusive. Pour cet exemple, ce serait quelque chose comme:
Pouvez-vous décrire / le message avec la base de données que vous utilisez? Je crois que cela causait une certaine confusion dans les réponses ci-dessous