2013-03-20 39 views
2

我正在使用rails,我有這個sql查詢我想用arel做。查詢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)。