Получение записи из коллекции - PullRequest
0 голосов
/ 23 января 2019

Я хочу получить user_5 (это пользователь с идентификатором 5) из коллекции users.

users = User.all
user_5 = ???

Я знаю, что могу получить это с user = User.find(5), но я не хочу делать еще один запрос.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вызов

users = User.all

не выполняет запрос.Запрос выполняется, когда вы пытаетесь перебрать коллекцию в методе find. Может быть быстрее вызвать

users.find(5)

, чем использовать в памяти find, потому что он будет извлекать все записи из базы данных и выполнять итерациюповерх них:

users.find { |user| user.id == 5 }

Также users.find может на самом деле вызывать AR find, а не Enumerable#find, поэтому пример about ничего не может вернуть, безопаснее использовать #detect

0 голосов
/ 23 января 2019

Вы можете использовать # find :

users = User.all
user_5 = users.find { |user| user.id == 5 }
...