2

我有一个名为“事件”的模型,它的范围名为“即将到来”,它返回未来日期的事件。在 Rails 控制台中,每当我输入

Event.upcoming

它成功返回事件的子集。但是,如果我输入:

@events = Event.all
@events.upcoming

我收到一个未定义的方法“即将到来”错误。范围是否仅适用于类而不适用于实例化变量?提前致谢。约汉

4

2 回答 2

14

一旦你调用.all,@events就不再是ActiveRelation, 因此你不能调用它的作用域。

所以,Event.where(SOME CONDITIONS).order(ORDERING).upcoming.limit(X)仍然可以工作,但Event.where(SOME CONDITIONS).order(ORDERING).all.upcoming.limit(X)不会工作。

于 2012-05-02T11:45:44.117 回答
12

您可以使用scoped而不是all获取一个活动关系对象,该对象将允许您在设置变量后链接范围:

@events = Event.scoped
@events.upcoming
于 2012-05-02T12:11:34.793 回答