Est-il possible d'utiliser ActiveRecord named_scope
s pour créer une requête avec les clauses sql OR
?Disjonction dans ActiveRecord
Lorsque j'utilise
Model.scope1.scope2
requête générée est conjonction de ces champs d'application.
Est-il possible d'utiliser ActiveRecord named_scope
s pour créer une requête avec les clauses sql OR
?Disjonction dans ActiveRecord
Lorsque j'utilise
Model.scope1.scope2
requête générée est conjonction de ces champs d'application.
Ce n'est pas vraiment ce que les étendues nommées ont été conçues pour faire, mais vous pourriez probablement les utiliser avec du code supplémentaire pour obtenir ce dont vous avez besoin.
def combine_scopes(model)
(model.scope1 + model.scope2).uniq
end
ou permettent des champs d'application à combiner
def combine_scopes(model, scope1, scope2)
(model.send(scope1) + model.send(scope2)).uniq
end
vous pouvez même changer cela pour permettre un certain nombre de champs en utilisant * args
Votre méthode génère plusieurs requêtes SQL. C'est facile de cette façon;) – samuil
Personnellement, je ne le ferais pas de cette façon, je ne faisais que suggérer une méthode qui utilisait des portées nommées. Si c'était moi, je n'aurais qu'une seule portée nommée utilisant OR dans le paramètre conditions. Pas aussi flexible si vous avez plusieurs étendues nommées, mais si la performance est un facteur à prendre en considération, vous ne voudrez peut-être pas la requête supplémentaire. –