使用Arel查询

时间:2013-03-20 13:43:47

标签: ruby-on-rails arel

我正在使用rails,我有这个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解决了查询,但我想避免重复“匹配(”%#{search}%“)”以查找必须匹配相同搜索变量的属性。

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}%"))))

但这不起作用。

1 个答案:

答案 0 :(得分:2)

问题是条件看起来像(((c1或c2)或c3)或c4)但似乎Arel的“或”概念是二元的。

因此无法将它们定义为(c1或c2或c3或c4)。