在ActiveRecord中断开

时间:2010-06-09 11:48:46

标签: ruby-on-rails activerecord boolean

是否可以使用ActiveRecord named_scope创建一个带有sql OR子句的查询?

当我使用

Model.scope1.scope2

生成的查询是这些范围的结合。

2 个答案:

答案 0 :(得分:0)

这不是命名范围的设计目的,但你可以使用它们和一些额外的代码来获得你需要的东西。

def combine_scopes(model)
  (model.scope1 + model.scope2).uniq
end

或允许任何范围合并

def combine_scopes(model, scope1, scope2)
  (model.send(scope1) + model.send(scope2)).uniq
end

你甚至可以改变它以允许任何数量的范围使用* args

答案 1 :(得分:0)

我回答是因为这是Google针对“活动记录析取”的第一个结果。

使用Rails 5+,您可以执行以下操作:

Model.scope1.or(Model.scope2)

对于Rails 4.2.3+,有一个反向端口here

Eric-Guo创建了一个宝石where-or,也使用他的宝石为or添加了rails >= 4.2.3功能。