【问题标题】:Rails scopes - undefined methodsRails 范围 - 未定义的方法
【发布时间】:2012-05-11 21:16:44
【问题描述】:

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

Event.upcoming

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

@events = Event.all
@events.upcoming

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

【问题讨论】:

    标签: ruby-on-rails scope


    【解决方案1】:

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

    因此,Event.where(SOME CONDITIONS).order(ORDERING).upcoming.limit(X) 仍然可以工作,但 Event.where(SOME CONDITIONS).order(ORDERING).all.upcoming.limit(X) 将无法工作。

    【讨论】:

    • 太棒了!解决了我的问题,谢谢!也只是附加到你所说的内容。诸如 Event.find_all_xxx() 之类的任何方法都会破坏 ActiveRelation,因此范围将不起作用
    【解决方案2】:

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

    @events = Event.scoped
    @events.upcoming
    

    【讨论】:

    • 很好的帮助,谢谢 Beerlington。我不得不给@zsquare“正确”的答案标记,因为他解释了为什么会发生这种情况。再次感谢!
    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多