用Rails Arel从分块中生成复杂的单一SQL查询。

问题描述 投票:0回答:1

我真的很诧异用Arel建立单个复合sql查询,当发现Arel的东西是不可链的。

经过长时间的搜索,我找到了一个单一的解决方案,它使用'反射'自定义方法,想法是递归实例化新的sql查询。它使用了'reflect'自定义方法,想法是递归实例化新的构建器类。没有问题。

例如,我是如何尝试的。

e = Arel::Table.new(:events)
a = e.where(e[:id].eq(1))

if (smth)  { a.where(e[:name].eq('joe')) } # not works

不可能以某种方式把它连在一起 我的计划被打乱了。好吧,我已经手动实现了。

然而,这不是一个好主意,因为我应该防止任何sql-injections陷阱,等等。

ruby-on-rails activerecord arel
1个回答
1
投票
e.where(e[:id].eq(1).and(e[:name].eq('joe'))

不过我真的不明白你为什么要用Arel,因为这是用ActiveRecord查询接口的琐碎任务。

Event.where(id: 1, name: 'joe')
# calls to merge are additive 
Event.where(id: 1).where(name: 'joe')
# you can also programmatically merge scopes together
Event.where(id: 1).merge(Event.where(name: 'joe')) 
© www.soinside.com 2019 - 2024. All rights reserved.