ActiveRecord匿名范围

我正在通过观看RailsCast video了解匿名范围。 当我自己尝试时,它似乎是声明:

scope = User.scoped 

立即用SQL语句查询DB:

 User Load (3.2ms) SELECT `users`.* FROM `users` 

在我甚至有机会连锁条件之前。 这显然是非常低效的,并且当video中的作者完成时它不会发生。 我错过了什么?

此外,范围在什么时候知道我已完成链接条件并且是时候执行查询了?

你在控制台试试吗? 问题是如果你输入:

 scope = User.scoped 

console尝试检查最后一个语句并触发查询。 为避免这种情况,只需在最后返回一些内容:

 scope = User.scoped; nil 

这样console检查nil并且您的scope变量没有任何变化。 这在实际代码中不会成为问题,因为在您定义之后没有人会尝试检查它。

我不喜欢劝阻你,但是很确定,在Rails 4中, scoped的方法即将被弃用。 这个RailsCast讨论了新版本更有趣的新function。