Est-il possible d'utiliser ActiveRecord named_scope
s pour créer une requête avec sql OR
clauses ?
Quand j'utilise
Model.scope1.scope2
La requête générée est une conjonction de ces scopes.
Est-il possible d'utiliser ActiveRecord named_scope
s pour créer une requête avec sql OR
clauses ?
Quand j'utilise
Model.scope1.scope2
La requête générée est une conjonction de ces scopes.
Je réponds car c'était le premier résultat de Google pour "disjonction active des enregistrements".
Avec Rails 5+, vous pouvez faire quelque chose comme :
Model.scope1.or(Model.scope2)
Pour Rails 4.2.3+ il y a un backport aquí .
Eric-Guo a créé un joyau où-ou en ajoutant or
la fonctionnalité de rails >= 4.2.3
qui utilise aussi sa gemme.
Ce n'est pas vraiment ce que les scopes nommés ont été conçus pour faire, mais vous pourriez probablement les utiliser avec un peu de code supplémentaire pour obtenir ce dont vous avez besoin.
def combine_scopes(model)
(model.scope1 + model.scope2).uniq
end
ou permettre de combiner tous les champs d'application
def combine_scopes(model, scope1, scope2)
(model.send(scope1) + model.send(scope2)).uniq
end
vous pourriez même changer cela pour permettre un nombre quelconque de scopes en utilisant *args
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.