作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试抽象出有人插入我们代码库的原始 sql 主体,我们使用的是 Rails 4.2.8。我想要生成以 where 子句结尾的 sql,如下所示:
WHERE col1=1 OR col2=1 OR col3=1
我正在使用以下 Arel 来尝试生成该 sql:
my_clause = mytable[:col1].eq(1)
.or(mytable[:col2].eq(1))
.or(mytable[:col3].eq(1))
puts my_clause.to_sql
我实际上得到的是:
WHERE (col1=1 OR col2=1) OR col3=1
我发现我的代码没有生成“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)
}
关于sql - 使用多个 Arel OR 子句时省略链式括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892056/
我是一名优秀的程序员,十分优秀!