使用多个 Arel OR 子句时省略链式括号
Omit chaining parenthesis when using multiple Arel OR clauses
我正在尝试抽象出一堆原始的 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 子句w/o parens。
您可以尝试直接使用 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 某人推入我们的代码库,我们正在使用 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 子句w/o parens。
您可以尝试直接使用 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)
}