Disjunction in ActiveRecord
Is it possible to use ActiveRecor开发者_开发百科d named_scope
s to create one query with sql OR
clauses?
When I use
Model.scope1.scope2
generated query is conjunction of these scopes.
I reply as this was the first google result for "active record disjunction".
With Rails 5+ you can do something like:
Model.scope1.or(Model.scope2)
For Rails 4.2.3+ there is a backport here.
Eric-Guo created a gem where-or adding or
functionality to rails >=
4.2.3
also using his gem.
This isn't really what named scopes were designed to do, but you could probably use them with some additional code to get what you needed.
def combine_scopes(model)
(model.scope1 + model.scope2).uniq
end
or allow any scopes to be combined
def combine_scopes(model, scope1, scope2)
(model.send(scope1) + model.send(scope2)).uniq
end
you could even change that to allow any number of scopes using *args
精彩评论