我有一个名为"event"的模型,它的作用域名为"即将到来的",它返回将来发生的事件。在 rails 控制台中,每当我键入
Event.upcoming
它成功返回事件的子集。但是,如果我输入:
@events = Event.all
@events.upcoming
我收到一个未定义的方法"即将到来"错误。作用域是否仅适用于类而不是实例化变量?提前谢谢。约汉
一旦你调用.all
,@events
就不再是ActiveRelation
,因此你不能在它上面调用作用域。
所以,Event.where(SOME CONDITIONS).order(ORDERING).upcoming.limit(X)
仍然有效,但Event.where(SOME CONDITIONS).order(ORDERING).all.upcoming.limit(X)
行不通。
scoped
而不是all
来获取活动关系对象,该对象允许您在设置变量后链接变量上的范围:
@events = Event.scoped
@events.upcoming