未定义的方法'标准'对于Ruby对象

时间:2014-05-28 20:05:26

标签: ruby ruby-on-rails-3 mongodb mongomapper

undefined method `criteria' for #<Timeclock:0x00000106a969b8>

MongoMapper - MongoDB - 尝试在Timeclock类中定义以下范围:

  scope :last_clock_time, ->(session) do
    where({:user => session[:user_id]}).sort(:created_at.desc).first() 
  end

我致电Timeclock.last_clock_time(session),我在顶部收到错误。

甚至不确定&#39;标准&#39;在这种情况下

编辑:

所以我发布了一个问题,然后继续玩它 - 我改变了这个:

scope :last_clock_time, ->(session) do
        where({:user => session[:user_id]}).sort(:created_at.desc)
      end

然后我拨打Timeclock.last_clock_time.first()并且它可以正常工作

为什么?

1 个答案:

答案 0 :(得分:2)

您的原始last_clock_time根本不是一个范围,它只是一个返回最多一个Timeclock 的查询。范围应该返回一个查询(AKA&#34;条件&#34;或&#34;搜索条件&#34;),以便您可以链接它:

Model.scope1.scope2.where(...)...

当您在查询上致电first时,您会收到一个Timeclock个实例(当然还是nil),并且模型实例没有criteria个方法,查询和模型类确实有criteria方法,这就是范围应该返回的那种东西。

某处某事假设你的范围确实是一个范围,并且在其返回值上调用criteria以使用基础查询。但是你的范围是谎言,因为它会返回错误的东西。

当您放弃first调用时,您的范围不再是谎言并返回范围应该返回的范围。一旦你的示波器停止说谎,一切都会开始起作用。