加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – TypeError:无法访问Arel :: Nodes :: Union

发布时间:2020-12-17 02:11:29 所属栏目:百科 来源:网络整理
导读:我在我的域表的两个子集上执行联合,其中cnt是局部变量,使用arel 2.0.9和 squeel 0.8.5作为查询接口. def bla cnt Domain.group { some_id }.select { `*` }.select { count(`*`).as(`cnt`) }.having { `cnt` = cnt }end 现在,在构建两个调用的并集时,如cnt(1
我在我的域表的两个子集上执行联合,其中cnt是局部变量,使用arel 2.0.9和 squeel 0.8.5作为查询接口.

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:无法访问Arel :: Nodes :: Union.

有任何想法吗?我可以用不同的方式编写查询,例如通过使用条件逻辑(在arel中可行吗?)…

解决方法

不确定我是否理解你,但要获得两个或更多单独查询的联合,您可以使用以下方法:

scope :union,lambda { |a,b| where{id.in(Model.where{attr1.eq a}) | id.in(Model.where{attr2.eq b}) } }

这有点难看,但我不知道任何其他方法……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读