У Rails 4 есть поддержка OR запросов

Итак, в Rails 4 добавлена ​​длинная желаемая функция для использования запросов not.

Article.where.not(title: 'Rails 3')

Аналогичная поддержка была добавлена ​​для запросов or, или они планируют это сделать. Я ничего не смог найти, просмотрев заметки о выпуске.

Очевидно, я попробовал

Article.where(title: 'Rails 3').or(title: 'Rails 4')

Но это не работает.

Ответ 1

Article.where(title: ['Rails 3', 'Rails 4']) заключается в том, как это сделать в Active Record.

Невозможно выполнить репликацию произвольного SQL-запроса с использованием синтаксиса Rails-y. Но вы всегда можете просто передать буквальный sql.

Итак, вы также можете сделать:

Article.where("articles.title = 'Rails 3' OR articles.title = 'Rails 4'")

Ответ 3

Наиболее распространенной альтернативой является уже ответ @gregates

Недавно был запрошен запрос на тягу в источнике рельсов

Добавить метод #any_of query в active_record Что добавляет или функциональность для activerecord

вкладчик уже создал драгоценный камень, если он не принят

его рельсы 3,2 и 4 совместимые

https://github.com/oelmekki/activerecord_any_of

Я havent попробовал еще, но скоро хочу использовать его, хорошо выглядит для меня.

Ответ 4

Кажется, что ветвь master rails теперь поддерживает OR запросов. https://github.com/rails/rails/pull/16052

Я предполагаю, что это будет в рамках следующей крупной версии.

Ответ 5

Я знаю, что это старый поток, но любой, кто ищет решение этой проблемы, может найти этот код полезным:

Article.where(title: ["Rails 3", "Rails 4"])

Возможно, это поможет вам заставить кого-то идти в правильном направлении, не рискуя инъекцией sql.

Ответ 6

Rails 5 будет поддерживать его, но вы можете использовать этот backport для Rails 4.2: https://github.com/Eric-Guo/where-or

Ответ 7

Вы можете использовать Squeel для более сложных запросов:

Article.where{(title == 'Rails 3') | (title == 'Rails 4')}

В результате возникает следующий запрос SQL:

SELECT `articles`.* FROM `articles` WHERE ((`articles`.`title` = 'Rails 3' OR `articles`.`title` = 'Rails 4'))