У 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'")
Ответ 2
Теперь это работает в Rails 5:
Article.where(title: 'Rails 3').or(Article.where(title: 'Rails 4'))
Пример кода в источнике Rails.
Ответ 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'))