类型错误:无法访问 Arel::Nodes::Union
我正在对我的 domain 表的两个子集执行联合,其中 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: Cannot access Arel ::节点::联合
。
有什么想法吗?我可以以不同的方式编写查询,例如使用条件逻辑(在arel中可行吗?)...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不确定我是否理解正确,但要获得两个或多个单独查询的联合,您可以使用以下方法:
它有点难看,但我不知道有任何其他方法......
Not sure if I am understanding you right, but to get a union of two or more separate queries, you can use the followng approach:
It's a little ugly, but I am not aware of any other approach...
您需要将
ActiveRecord::Relation
对象转换为Arel::Nodes::SelectStatement
,您可以通过Relation#ast
轻松完成此操作代码>:You need to convert the
ActiveRecord::Relation
object into aArel::Nodes::SelectStatement
, you can easily do this by way ofRelation#ast
: