Я хочу зробити
Model.where('id = ?', [array of values])
Як мені виконати цей пошук, не зв’язуючи АБО висловлювання?
Я хочу зробити
Model.where('id = ?', [array of values])
Як мені виконати цей пошук, не зв’язуючи АБО висловлювання?
Відповіді:
Від тут вона , як видається, зробити з допомогою SQL - in
оператор:
Model.where('id IN (?)', [array of values])
Або простіше, як зазначив kdeisz (Використання Arel для створення запиту SQL):
Model.where(id: [array of values])
1..8
це вже схоже на масив.
З посібника з інтерфейсу запитів ActiveRecord
Якщо ви хочете знайти записи за допомогою виразу IN, ви можете передати масив у хеш умов:
Client.where(orders_count: [1,3,5])
Для читабельності це можна ще спростити, щоб:
Model.find_by(id: [array of values])
Це еквівалентно використанню where
, але більш чітке:
Model.where(id: [array of values])
find_by
насправді є where().take
. Model.find_by(id: [1, 2, 3])
повернеться лишеModel(id: 1)
find_by_id([1, 2, 3])
Якщо ви шукаєте запит у mongoid, це тойModel.where(:field.in => ["value1", "value2"] ).all.to_a
Існує "невелика" різниця між де і find_by .
find_by поверне лише один запис, якщо знайдений, інакше буде нуль.
Знаходить перший запис, що відповідає зазначеним умовам. Немає неявного замовлення, тому, якщо порядок має значення, ви повинні вказати його самостійно. Якщо жодного запису не знайдено, повертає нуль.
def find_by(*args)
where(*args).take
rescue RangeError
nil
end
тим часом де це поверне відношення
Повертає нове відношення, яке є результатом фільтрації поточного відношення відповідно до умов аргументів.
Отже, у вашій ситуації відповідний код:
Model.where(id: [array of values])
Model.where(id: [array of values])