使用多个 Arel OR 子句时省略链接括号



我试图抽象出有人在我们的代码库中塞进的原始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) 
}

相关内容

  • 没有找到相关文章

最新更新