Ответ 1
Из here это делается с помощью инструкции SQL in
:
Model.where('id IN (?)', [array of values])
Или проще, как указал kdeisz (используя Arel для создания SQL-запроса):
Model.where(id: [array of values])
Я хочу сделать
Model.where('id = ?', [array of values])
Как выполнить этот поиск без объединения операторов OR вместе?
Из here это делается с помощью инструкции SQL in
:
Model.where('id IN (?)', [array of values])
Или проще, как указал kdeisz (используя Arel для создания SQL-запроса):
Model.where(id: [array of values])
Из руководства по интерфейсу ActiveRecord Query
Если вы хотите найти записи, используя выражение IN, вы можете передать массив в хэш условий:
Client.where(orders_count: [1,3,5])
Для удобства чтения это можно еще упростить, чтобы:
Model.find_by(id: [array of values])
Это эквивалентно использованию where
, но более явному:
Model.where(id: [array of values])
Если вы ищете запрос в mongoid, то это Model.where(:field.in => ["value1", "value2"]).all.to_a
Существует небольшая разница между where и find_by.
find_by вернет только одну запись, если найдена, иначе будет ноль.
Находит первую запись, соответствующую заданным условиям. Нет подразумеваемого заказа, поэтому, если заказ имеет значение, вы должны указать его самостоятельно. Если запись не найдена, возвращает ноль.
def find_by(*args)
where(*args).take
rescue RangeError
nil
end
Между тем, где он вернет отношение
Возвращает новое отношение, которое является результатом фильтрации текущего отношения в соответствии с условиями в аргументах.
Итак, в вашей ситуации соответствующий код:
Model.where(id: [array of values])