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。