dans mon application Rails, je boucle à travers un tableau pour créer une liste de conditions à relever ou. Vous trouverez ci-dessous le flux de base de la façon dont je le fais actuellement. Évidemment, ce n'est pas beau, mais je ne connais toujours pas complètement mon chemin autour d'Arel. Offre-t-il un meilleur moyen de rejoindre un ensemble de conditions générées dynamiquement? P> p>
3 Réponses :
Je pense que c'est fondamentalement ça. J'initialiserais les conditions à l'objet de base pour éviter le ternaire:
Utiliser Arel 3.0.3 et ActiveRecord 3.2.16 et l'article ne répond pas à «ou».
Ceci est un ajustement parfait pour un injecter code> qui vous donnera une doublure que vous pouvez utiliser dans quelque chose d'autre aussi:
conditions = set.inject {| Conds, cond | cond.or (cond)} code> qui peut même être écrit:
set.inject (&: ou) code> qui est très agréable. P>
WOW - J'adore injecter code>, la surutiliser et l'avoir manqué pour ce scénario! Merci! :)
Je crois que cela crée une condition qui ressemble à (((C1 ou C2) ou C3) ou C4). Savez-vous s'il est possible de les définir comme (C1 ou C2 ou C3 ou C4)?
Github.com/Rails/arel/blob/Master/ lib / arel / nœuds / or.rb semblerait suggérer que la conception de Arel de ou code> est binaire. Donc, "Non" serait la réponse à votre question.
Quelle serait la différence? Pourquoi voulez-vous cela ou vous en soin?
@Roman - Vous pouvez utiliser #expr pour supprimer les supports inutiles: conditions = set.inject {| Conds, cond | CONDUTS.OR (COND) .EXPRESPR} CODE> @omuriauga - il semble juste plus gentil sans les crochets inutiles.
Il y a aussi un plugin utile pour cela. P>
Il aide à générer des conditions complexes. P>