我正在使用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解决了查询问题,但我希望避免对必须匹配相同搜索变量的属性重复"matches("%#{ 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}%"))))但这是行不通的。
发布于 2013-04-24 20:34:39
问题是条件看起来像(c1或c2)或c3)或c4),但它似乎是阿雷尔的“或”的概念是二进制的。
所以不可能将它们定义为(c1或c2或c3或c4)。
https://stackoverflow.com/questions/15525288
复制相似问题