ActiveRecord匿名范围

时间:2013-01-08 16:25:02

标签: ruby-on-rails ruby rails-activerecord

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

scope = User.scoped

立即使用SQL语句查询数据库:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

scope = User.scoped

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

scope = User.scoped; nil

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

答案 1 :(得分:1)

我不想劝阻你,但是很确定,在Rails 4中,方法scoped即将被弃用。 this RailsCast中讨论了新版本更有趣的新功能。