Rails的范围 - 未定义的方法(Rails scopes - undefined methods

2019-06-25 08:00发布

我有一个名为“事件”的模式,有一个名为了在未来日“即将到来的”至极的回报活动范围。 在轨道控制台,每当我型

Event.upcoming

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

@events = Event.all
@events.upcoming

我得到一个未定义的方法“即将到来”的错误。 正在作用域的工作的类,而不是实例变量? 提前致谢。 Yohann

Answer 1:

一旦你调用.all@events不再是一个ActiveRelation ,因此你不能调用它的一个范围。

所以, Event.where(SOME CONDITIONS).order(ORDERING).upcoming.limit(X)仍然工作,但Event.where(SOME CONDITIONS).order(ORDERING).all.upcoming.limit(X)是行不通的。



Answer 2:

您可以使用scoped ,而不是all得到一个积极的关系对象,将让您链范围的变量,它已经设置完成后:

@events = Event.scoped
@events.upcoming


文章来源: Rails scopes - undefined methods