开发者

Disjunction in ActiveRecord

Is it possible to use ActiveRecor开发者_开发百科d named_scopes 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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜