9
votes

arel, comment rejoindre

donné xxx

à l'aide des rails 3 pile, comment puis-je interroger pour toutes les catégories qui "ont" des produits?


0 commentaires

3 Réponses :


13
votes
Category.joins(:products).select("distinct categories.*").all

2 commentaires

Vous connaissez-vous une bonne référence sur ce qui est possible avec les requêtes arelles?


Je prends mes connaissances de Googling, lisez des blogs de rails-élites. Tente importante: ActiveRecord diffère beaucoup d'arel pure.



34
votes

in arel (non activeCord), nous suivrons ce qui suit: xxx


6 commentaires

Quand vous dites "dans Arel (pas ActiveRecord)", que voulez-vous dire précisément? Que nous ne pouvons pas faire cela dans une classe dérivée de aciverecord :: base ? Ceci est déroutant.


Dans tous ces exemples, je ne vois jamais la dernière étape pliant la requête arelle dans des rails pour obtenir des enregistrements réels. Que faire avec p maintenant? Vous pouvez appeler à_sql dessus à coup sûr, mais comment le transformer en une relation activeCord :: qui chargera des enregistrements?


@Bradgonesurfing, il suffit de le coller dans un AR où la méthode. Arel vient de générer SQL.


Ce qui précède est une jointure et ne peut pas être coincé dans une méthode d'où la méthode.


Pour une arelle qui génère un SELECT (non seulement une clause OS), vous utilisez wind_by_sql (arel_expression.to_sql) . Cela rendra une gamme d'enregistrements, pas une relation de chaîne Activeecord :: relation, mais au moins cela vous donne les résultats.


@bradgonesurfing pose vraiment une question différente ici. Voici cette question, et sa réponse: Stackoverflow.com/Questtions/13442073/... Brièvement, une bonne réponse est d'utiliser .All.ached et boucle (en utilisant FIND_BY_SQL WORKS, mais n'est pas une bonne réponse) C'est une chose de base de Activerecord, c'est pourquoi les gens ont tendance à laisser ces prochaines étapes, lors de la réponse aux questions telles que AREL Interminent.



1
votes

Une autre approche, plus simple, consiste à utiliser l'interface en conjonction avec arelle pour l'instruction conditionnelle: xxx

génère le SQL suivant dans SQLITE3: xxx

et le SQL suivant dans Postgres (remarquez l'ILIKE): xxx

Ceci vous permet de vous joindre à la simplicité, Mais obtenez toujours l'abstraction de l'arelle correspondant à votre SGBDM.


0 commentaires