2017-10-23 5 views
1

코드베이스에서 눌려진 원시 sql 사람의 몸체를 추출하려고 시도하고 있으며 우리는 Rails 4.2.8을 사용하고 있습니다.여러 Arel OR 절을 사용할 때 체인 괄호 사용을 생략하십시오

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

내가 실제로 GET : 그 SQL을 생성하는

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

내가 시도에 다음 Arel을 사용하고 있습니다 : 나는 절과 같이 어디로 끝나는 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