jay*_*del 2 sql activerecord ruby-on-rails arel ruby-on-rails-4
我试图抽象出有人推入我们的代码库中的原始 sql 的主体,我们正在使用 Rails 4.2.8。我想生成以 where 子句结尾的 sql,如下所示:
WHERE col1=1 OR col2=1 OR col3=1
Run Code Online (Sandbox Code Playgroud)
我正在使用以下 Arel 尝试生成该 sql:
my_clause = mytable[:col1].eq(1)
.or(mytable[:col2].eq(1))
.or(mytable[:col3].eq(1))
puts my_clause.to_sql
Run Code Online (Sandbox Code Playgroud)
我实际得到的是:
WHERE (col1=1 OR col2=1) OR col3=1
Run Code Online (Sandbox Code Playgroud)
我意识到我的代码不会生成“WHERE”这个词。为了清楚起见,我添加了它。
我们的 dba 已经能够向我保证,这在性能方面没什么大不了的,但它触发了我的强迫症,我想知道我将使用什么 Arel 语法来获取不带括号的链接 OR 子句。
您可以尝试直接构建所需的查询Arel::Nodes::Or(而不是or处理括号的方法):
[
mytable[:col1].eq(1),
mytable[:col2].eq(1),
mytable[:col3].eq(1)
].reduce {|clause, condition|
Arel::Nodes::Or.new(clause, condition)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |