У меня есть запрос Rails 4, подобный этому:
user.positions.where('positions.active = ? OR positions.deadline < ?', false, Date.current).joins(:cvs).where(cvs: {accepted: true}).group(:id).having('COUNT(cvs.id) = 3')
Теперь это производит следующий SQL-запрос:
SELECT `positions`.* FROM `positions` INNER JOIN `cvs` ON `cvs`.`position_id` = `positions`.`id` WHERE `positions`.`user_id` = 4 AND (positions.active = 0 OR positions.deadline < '2015-01-21') AND `cvs`.`accepted` = 1 GROUP BY id HAVING COUNT(cvs.id) = 3
Что мне действительно нужно, так это сделать второй запрос where с условием OR, но запрос сверху приводит к условию AND.
Я также пробовал следующее:
user.positions.joins(:cvs).where('positions.active = ? OR positions.deadline < ? OR cvs.accepted = 1 GROUP BY id HAVING COUNT(cvs.id) = ?', false, Date.current, 3)
но это преобразуется Rails в
SELECT `positions`.* FROM `positions` INNER JOIN `cvs` ON `cvs`.`position_id` = `positions`.`id` WHERE `positions`.`user_id` = 4 AND (positions.active = 0 OR positions.deadline < '2015-01-21' OR cvs.accepted = 1 GROUP BY id HAVING COUNT(cvs.id) = 3)
который выдает синтаксическую ошибку sql из-за закрывающей скобки в конце. Без открывающей и закрывающей скобки или если поставить закрывающую скобку после «2015-01-21», это сработает. Но я не знаю, как сказать Rails не ставить здесь никаких скобок.
(Что я действительно хочу запросить, так это все позиции, которые не активны ИЛИ те, где крайний срок уже истек ИЛИ где позиция имеет 3 принятых резюме)