Как вы делаете запрос OR в Rails 3 ActiveRecord. Все примеры, которые я нахожу, имеют только запросы AND.
Редактировать: метод OR доступен начиная с Rails 5. См. ActiveRecord :: QueryMethods
ruby-on-rails
ruby-on-rails-3
rails-activerecord
pho3nixf1re
источник
источник
Post.where(column: 'something').or(Post.where(other: 'else'))
Ответы:
Используйте ARel
Результирующий SQL:
источник
matches
будет производитьLIKE
для sqlite (без учета регистра по умолчанию) иILIKE
для postgres (требуется явный без учета регистра оператор типа like).Если вы хотите использовать оператор OR для значения одного столбца, вы можете передать массив,
.where
и ActiveRecord будет использоватьIN(value,other_value)
:выходы:
Это должно достигнуть эквивалента
OR
на одном столбцеисточник
в Rails 3 это должно быть
Это также включает в себя raw sql, но я не думаю, что в ActiveRecord есть способ выполнить операцию ИЛИ. Ваш вопрос не вопрос нуба.
источник
Page.where("pages.column = ? or pages.other_column = ?", value, other_value)
Обновленная версия Rails / ActiveRecord может изначально поддерживать этот синтаксис. Это будет выглядеть примерно так:
Как отмечено в этом запросе на получение доступа, https://github.com/rails/rails/pull/9052.
На данный момент просто придерживаться следующих работ прекрасно работает:
Обновление: По https://github.com/rails/rails/pull/16052
or
функция будет доступна в Rails 5Обновление: функция была объединена с веткой Rails 5
источник
or
сейчас доступен Rails 5, но не реализован таким образом, потому что ожидает 1 аргумент. Ожидается объект Арель. См принятый ответor
Метод ActiveRecord работает , если вы используете его напрямую: но может нарушить ваши ожидания , если он используется в объеме , который затем прикован.Rails недавно добавил это в ActiveRecord. Похоже, будет выпущено в Rails 5. Готовы уже освоить:
https://github.com/rails/rails/commit/9e42cf019f2417473e7dcbfcb885709fa2709f89
источник
Rails 5 поставляется с
or
методом. ( чернила к документации )Этот метод принимает
ActiveRecord::Relation
объект. например:источник
Если вы хотите использовать массивы в качестве аргументов, следующий код работает в Rails 4:
Дополнительная информация: OR запрашивает массивы в качестве аргументов в Rails 4 .
источник
Order.where(query.where_values.inject(:or))
использовать арел всю дорогу.MetaWhere плагин совершенно удивительно.
Легко смешивайте ИЛИ и И, присоединяйтесь к условиям любой ассоциации и даже указывайте ВНЕШНИЕ СОЕДИНЕНИЯ!
источник
Просто добавьте ИЛИ в условия
источник
Я только что извлек этот плагин из клиентской работы, который позволяет вам комбинировать области действия
.or.
, например,Post.published.or.authored_by(current_user)
, Squeel (более новая реализация MetaSearch) также хорош, но не позволяет вам выполнять операции ИЛИ, поэтому логика запросов может стать немного избыточной.источник
С рельсами + арелом, более понятный способ:
Производит:
источник
Вы можете сделать это так:
или более элегантно, установите rails_or gem и сделайте так:
источник
Я хотел бы добавить, что это решение для поиска нескольких атрибутов ActiveRecord. поскольку
будет искать А и Б.
источник
источник