2

私はレールで作業しており、アレルでやりたいこのSQLクエリがあります。

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

しかし、これは機能していません。

4

1 に答える 1

2

問題は、条件が (((c1 または c2) または c3) または c4) のように見えることですが、Arel の「または」の概念は 2 進数であるように思われます。

したがって、それらを (c1 または c2 または c3 または c4) として定義することはできません。

于 2013-04-24T12:34:39.403 に答える