3

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

scope = User.scoped

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

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

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

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

4

2 回答 2

3

您是否在控制台中尝试此操作?问题是,如果您键入:

scope = User.scoped

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

scope = User.scoped; nil

通过这种方式进行console检查nil,您的scope变量不会发生任何事情。这在实际代码中不会成为问题,因为在您定义它之后没有人会立即尝试检查它。

于 2013-01-08T16:30:01.537 回答
1

我不想让您气馁,但可以肯定的是,在 Rails 4 中该方法scoped即将被弃用。这个 RailsCast讨论了新版本的更多有趣的新特性。

于 2013-01-08T16:42:36.350 回答