我正在对域表的两个子集执行联合,其中 cnt
作为局部变量,使用 arel 2.0.9 和 squeel 0.8.5 作为查询接口(interface)。
def bla cnt
Domain.group { some_id }.select { `*` }.select { count(`*`).as(`cnt`) }.having { `cnt` >= cnt }
end
现在在构建两个调用的联合时说
cnt(1).union(cnt(1))
我得到一个 Arel::Nodes::Union
实例。我如何使用这种关系来实际获得我的结果?调用
#each
会产生完全相同的 Arel::Nodes::Union
引用,而 #to_sql
会产生 TypeError: Cannot visit Arel::Nodes::Union
。有任何想法吗?我可以用不同的方式编写查询,例如通过使用条件逻辑(在 arel 中可行吗?)...
最佳答案
不确定我的理解是否正确,但要获得两个或多个单独查询的联合,您可以使用以下方法:
scope :union, lambda { |a, b| where{id.in(Model.where{attr1.eq a}) | id.in(Model.where{attr2.eq b}) } }
这有点难看,但我不知道任何其他方法......
关于ruby - 类型错误:无法访问 Arel::Nodes::Union,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6589374/