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()
并且它可以正常工作
为什么?
答案 0 :(得分:2)
您的原始last_clock_time
根本不是一个范围,它只是一个返回最多一个Timeclock
的查询。范围应该返回一个查询(AKA&#34;条件&#34;或&#34;搜索条件&#34;),以便您可以链接它:
Model.scope1.scope2.where(...)...
当您在查询上致电first
时,您会收到一个Timeclock
个实例(当然还是nil
),并且模型实例没有criteria
个方法,查询和模型类确实有criteria
方法,这就是范围应该返回的那种东西。
某处某事假设你的范围确实是一个范围,并且在其返回值上调用criteria
以使用基础查询。但是你的范围是谎言,因为它会返回错误的东西。
当您放弃first
调用时,您的范围不再是谎言并返回范围应该返回的范围。一旦你的示波器停止说谎,一切都会开始起作用。