Подтвердить что ты не робот

ActiveRecord где field =? массив возможных значений

Я хочу сделать

Model.where('id = ?', [array of values])

Как выполнить этот поиск без объединения операторов OR вместе?

4b9b3361

Ответ 1

Из here это делается с помощью инструкции SQL in:

Model.where('id IN (?)', [array of values])

Или проще, как указал kdeisz (используя Arel для создания SQL-запроса):

Model.where(id: [array of values])

Ответ 3

Для удобства чтения это можно еще упростить, чтобы:

Model.find_by(id: [array of values])

Это эквивалентно использованию where, но более явному:

Model.where(id: [array of values])

Ответ 4

Если вы ищете запрос в mongoid, то это Model.where(:field.in => ["value1", "value2"]).all.to_a

Ответ 5

Существует небольшая разница между where и find_by.

find_by вернет только одну запись, если найдена, иначе будет ноль.

Находит первую запись, соответствующую заданным условиям. Нет подразумеваемого заказа, поэтому, если заказ имеет значение, вы должны указать его самостоятельно. Если запись не найдена, возвращает ноль.

  def find_by(*args)
      where(*args).take
    rescue RangeError
      nil
  end

Между тем, где он вернет отношение

Возвращает новое отношение, которое является результатом фильтрации текущего отношения в соответствии с условиями в аргументах.

Итак, в вашей ситуации соответствующий код:

Model.where(id: [array of values])