我需要在Rails 5中使用Arel或ActivereCord编写查询,并使用交叉点和工会在Rails 5中编写查询。到目前为止,我发现的每个答案通常都涉及将OP给出的特定示例转换为另一种查询。这对我不起作用,因为这些疑问是通过编程性组成的,而到目前为止,最明智的方法是与次级征服,然后与Intersect和Union一起加入。
。与&
相交并与|
联合完全有效,并且可以做我想要的,但是这两个返回数组都不会出于没有充分的理由将巨大的巨大巨大数据集进入记忆中。
MyModel.where(...).intersect(MyModel.where(...))
这种作品,但结果是Arel::Nodes::Intersect
而不是ActiveRecord::Relation
,这不那么有用。我尝试直接使用阿雷尔(Arel(进行建造,但由于缺乏文档而感到沮丧。
是否有更多的铁轨方法可以实现这一目标(即,仍然可以像AR ::关系一样懒惰地分页(?
相交,只需使用:
MyModel.where(...).where(...)
或这样的多行可以是更好的语法:
MyModel
.where(...)
.where(...)
您也可以在(nil(的地方使用它对关系没有影响。当您通过编程方式构造位置(例如where({a: a_val} if a_val.present?
(。
对于联合,使用Rails 5 or
:
MyModel.where(...).or(MyModel.where(...))
或使用多行语法:
MyModel
.where(...)
.or(
MyModel
.where(...)
)