ruby - 类型错误:无法访问 Arel::Nodes::Union

标签 ruby arel

我正在对我的 domain 表的两个子集执行并集,其中 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::节点::联合

有什么想法吗?我可以以不同的方式编写查询,例如通过使用条件逻辑(在 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/

相关文章:

ruby - Mechanize 如何获取当前 url

arrays - 在 Ruby 中创建空子数组的数组

ruby-on-rails - 如何干燥这个 rspec 测试?

ruby - 为什么人们在模块定义中使用扩展?

sql - 尝试使用 DISTINCT 和 GROUP BY 失败

ruby - 怎么没有FalseClass.new呢?

mysql - 阿雷尔 gem : "SELECT *" missing from where clause in rails

ruby-on-rails - Ruby:将 Arel.sql 转换为 Arel::Nodes::Case 的想法?

mysql - 如何在每个组中选择具有最新日期的记录

ruby-on-rails-4 - Arel:来自 Arel::SelectManager 与连接的事件关系