donné à l'aide des rails 3 pile, comment puis-je interroger pour toutes les catégories qui "ont" des produits? p> p>
3 Réponses :
Category.joins(:products).select("distinct categories.*").all
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.
in arel (non activeCord), nous suivrons ce qui suit:
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 code>? 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) code>. 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 code> et boucle (en utilisant
FIND_BY_SQL CODE> 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.
Une autre approche, plus simple, consiste à utiliser l'interface code> code> code> en conjonction avec arelle pour l'instruction conditionnelle: génère le SQL suivant dans SQLITE3: p> et le SQL suivant dans Postgres (remarquez l'ILIKE): p> Ceci vous permet de vous joindre à la simplicité, Mais obtenez toujours l'abstraction de l'arelle correspondant à votre SGBDM. p> p>