我正在通过观看RailsCast video了解匿名范围。当我自己尝试时,它似乎是声明:
scope = User.scoped
立即使用SQL语句查询数据库:
User Load (3.2ms) SELECT `users`.* FROM `users`
在我有机会连锁条件之前。这显然是非常低效的,并且当视频中的作者完成时它不会发生。我错过了什么?
此外,范围在什么时候知道我已完成链接条件并且是时候执行查询了?
答案 0 :(得分:2)
你在控制台试试吗?问题是如果你输入:
scope = User.scoped
console
尝试检查最后一个语句并触发查询。为了避免这种情况,只需在最后返回一些东西:
scope = User.scoped; nil
这样console
检查nil
并且scope
变量没有任何变化。这在实际代码中不会成为问题,因为在您定义之后没有人会尝试检查它。
答案 1 :(得分:1)
我不想劝阻你,但是很确定,在Rails 4中,方法scoped
即将被弃用。 this RailsCast中讨论了新版本更有趣的新功能。