2015-12-08 1 views
0

У меня есть таблица базы данных users. Я пытаюсь запрос к базе данных для выборки всех пользователей, возраст которых больше 18.Как консоль rails предоставляет результирующий набор при запросе, если включена функция Lazy Loading?

adult_users = User.where('age > 18') 

Этого запрос не будет выполнен, так как за ленивую функцию загрузки, вместо этого он будет просто создать активный Relation записи. Фактический запрос будет выполнен только тогда, когда вы вызываете adult_users.first, или если вы выполняете с ним другие операции.
Но в консоли rails, даже если вы нажмете User.where('age > 18'), вы можете увидеть выполнение запроса.
Как это могло случиться?

+0

«как мы могли бы получить набор результатов без выполнения фактического запроса?» Это не имеет никакого смысла. Вы не можете получить набор результатов без выполнения запроса. Откуда взялись результаты? Вы можете уточнить свой вопрос? –

+0

Я имел в виду, что ленивая загрузка не выполняет запрос. Например, adult_users = User.where ('age> 18'), не будет выполнять запрос, вместо этого он просто создаст Active Record Relation, и фактический запрос будет выполнен только тогда, когда вы вызываете adult_users.first или если вы делаете некоторые другие операции с ним. Но в консоли rails, даже если вы нажмете User.where ('age> 18'), вы увидите результаты. Как такое могло произойти? Это имеет смысл сейчас? –

+0

См. Ниже ответ Василеда. По терминологической заметке в Rails «ленивая загрузка» (по сравнению с «нетерпением») относится к тому, будет ли запрос на одной модели загружать все связанные записи для отношения. Термины не связаны с вопросом, о котором вы говорите. –

ответ

2

В консоли это делает выполнить запрос во время осмотра ActiveRecord::Relation

Если вход включен, то вы можете даже увидеть User Load запись.

Если вы наберете

adult_users = User.where('age > 18'); nil 

тогда переменная не будут проверены и не запустить запрос