如果启用延迟加载,rails 控制台如何提供查询结果集?

Gan*_*hat 2 ruby lazy-loading ruby-on-rails

我有一个数据库表users。我正在尝试查询数据库以获取所有年龄大于 18 的用户。

adult_users = User.where('age > 18')
Run Code Online (Sandbox Code Playgroud)

根据延迟加载功能,不会执行上述查询,而只会创建一个 Active Record Relation。实际的查询只有在您调用adult_users.first或使用它进行其他一些操作时才会执行。
但是在 rails 控制台中,即使您点击User.where('age > 18'),您也可以看到查询正在执行。
这怎么会发生?

Vas*_*fed 8

In console it does execute the query while inspecting the ActiveRecord::Relation

If logging is enabled you can even see the User Load entry.

If you type

adult_users = User.where('age > 18'); nil
Run Code Online (Sandbox Code Playgroud)

那么变量将不会被检查,也不会运行查询