2017-10-23 3 views
1

私は、コードベースに入れられたraw sqlの本体を抽象化しようとしており、Rails 4.2.8を使用しています。私はそのSQLを生成するための試みで、次のARELを使用してい複数のArel OR句を使用する場合、連鎖括弧を省略します

WHERE col1=1 OR col2=1 OR col3=1 

my_clause = mytable[:col1].eq(1) 
    .or(mytable[:col2].eq(1)) 
    .or(mytable[:col3].eq(1)) 
puts my_clause.to_sql 

私は実際にGET私ははそうのようなwhere句で終わるSQLを生成したいは次のとおりです。私は私のコードは「」単語を生成しないことを

WHERE (col1=1 OR col2=1) OR col3=1 

実現します。私はそれを分かりやすくするために追加しました。

dbaはパフォーマンスに関して大きな問題ではないことを私に保証することができましたが、OCDをトリガーしています。私は、Arel構文を使用して、括弧付きのOR節を取得することにします。

答えて

2

あなたが直接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) 
} 
+0

パーフェクト、ありがとうございました – jaydel

関連する問題