12
votes

Arel: Comment bien joindre plusieurs conditions avec ou?

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. XXX

É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?


0 commentaires

3 Réponses :


-1
votes

Je pense que c'est fondamentalement ça. J'initialiserais les conditions à l'objet de base pour éviter le ternaire: xxx


1 commentaires

Utiliser Arel 3.0.3 et ActiveRecord 3.2.16 et l'article ne répond pas à «ou».



14
votes

Ceci est un ajustement parfait pour un injecter qui vous donnera une doublure que vous pouvez utiliser dans quelque chose d'autre aussi: conditions = set.inject {| Conds, cond | cond.or (cond)} qui peut même être écrit: set.inject (&: ou) qui est très agréable.


5 commentaires

WOW - J'adore injecter , 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 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} @omuriauga - il semble juste plus gentil sans les crochets inutiles.



1
votes

Il y a aussi un plugin utile pour cela.

Conditions_Helper

Il aide à générer des conditions complexes.


0 commentaires