2013-03-20 3 views
2

레일로 작업하고 있는데 arel로하고 싶은 SQL 쿼리가 있습니다.Arel로 쿼리하기

"SELECT `people`.* FROM `peoples` WHERE `peoples`.`home_id` = 289 AND (`people`.`created_at` BETWEEN '2013-03-12' AND '2013-03-15' AND (`people`.`first_name` LIKE '%jane%' OR `people`.`email` LIKE '%jane%'))" 

지금, 나는 arel와 쿼리를 해결 한하지만 난 "(% 번호 {검색} %") "동일한 검색 변수와 일치해야하는 속성의 일치"를 반복하지 않도록하고 싶습니다. 같은

a.where(a.arel_table[:created_at].in(date_range).and(a.arel_table[:first_name].matches("%#{search}%").or(a.arel_table[:email].matches("%#{search}%")))) 

뭔가 :

a.where(a.arel_table[:created_at].in(date_range).and([:email, :first_name].each {|attr| or.(a.arel_table[:attr].matches("%#{search}%")))) 

하지만이 작동하지 않습니다.

답변

2

문제는 조건이 ((c1 또는 c2) 또는 c3) 또는 c4) 인 것처럼 보이지만 Arel의 "or"개념은 이진이라는 것입니다.

따라서 (c1 또는 c2 또는 c3 또는 c4)로 정의 할 수 없습니다.