Rails范围 - 未定义的方法

Yoh*_* T. 2 scope ruby-on-rails

我有一个名为"event"的模型,其中有一个名为"coming"的范围,它将返回未来日期的事件.在rails控制台中,每当我键入

Event.upcoming
Run Code Online (Sandbox Code Playgroud)

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

@events = Event.all
@events.upcoming
Run Code Online (Sandbox Code Playgroud)

我得到一个未定义的方法'即将发生'错误.范围只适用于类而不是实例化变量吗?提前致谢.Yohann

zsq*_*are 13

一旦你打电话.all,@events不再是一个ActiveRelation,因此你不能在它上面调用范围.

所以,Event.where(SOME CONDITIONS).order(ORDERING).upcoming.limit(X)仍然有效,但Event.where(SOME CONDITIONS).order(ORDERING).all.upcoming.limit(X)不会奏效.


Pet*_*own 11

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

@events = Event.scoped
@events.upcoming
Run Code Online (Sandbox Code Playgroud)