Запросы с 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, но я хотел бы избежать повторения " 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}%"))))
Но это не работает.
1 2

1 ответ:

Проблема заключалась в том, что условие выглядит как (((c1 или c2) или c3) или c4), но похоже, что концепция Ареля "или" является бинарной.

Поэтому невозможно определить их как (c1 или c2, c3 или c4).