Rails范围 - 未定义的方法

时间:2012-05-02 11:44:18

标签: ruby-on-rails scope

我有一个名为“event”的模型,其中有一个名为“coming”的作用域,它返回将来会发生的事件。在rails控制台中,每当我键入

Event.upcoming

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

@events = Event.all
@events.upcoming

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

2 个答案:

答案 0 :(得分:13)

致电.all后,@events不再是ActiveRelation,因此您无法在其上调用示波器。

因此,Event.where(SOME CONDITIONS).order(ORDERING).upcoming.limit(X)仍然有效,但Event.where(SOME CONDITIONS).order(ORDERING).all.upcoming.limit(X)无效。

答案 1 :(得分:11)

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

@events = Event.scoped
@events.upcoming