我试图在我们的代码库中抽出一个原始sql的主体,我们正在使用Rails 4.2.8。我想要生成以where子句结尾的sql:
SELECT product.product_id FROM `oc_product` product
LEFT JOIN `oc_product_attribute` attribute ON product.product_id = attribute.product_id
WHERE
((attribute.attribute_id = 13 (weight) AND `text` BETWEEN 1 AND 2)
OR (attribute.attribute_id = 12 (length) AND `text` BETWEEN 10 AND 12));
我正在使用以下Arel来尝试生成该sql:
AND
我实际得到的是:
WHERE col1=1 OR col2=1 OR col3=1
我意识到我的代码没有生成'WHERE'这个词。为了清楚起见,我补充说。
我们的dba已经能够向我保证它在性能方面不是什么大问题,但是它触发了我的OCD,我想知道我将使用什么Arel语法来获得链接OR条款而不是parens。
答案 0 :(得分:3)
您可以尝试直接使用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)
}