我遗漏了一些简单的事情 - 我不想要在视图中访问此查询的结果。
以下是查询:
@adm = Admin.where({:id => {"$ne" => params[:id].to_s},:email => params[:email]})
当然,当你检查时,你得到:
@adm is #<MongoMapper::Plugins::Querying::DecoratedPluckyQuery:0x007fb4be99acd0>
我理解(从询问MM的人)为什么会这样 - 他们希望尽可能地延迟实际查询的结果,并且只有在我们渲染之前才能获得查询对象的表示(在视图中! )。
但我在我的代码中试图确定的是,如果我的一个参数匹配或与控制器中的查询的结果不匹配,那么我可以返回错误消息或继续进行。
通常情况下我会这样做:
@adm.id
让BSON摆脱这种局面。当您在装饰查询上尝试此操作时,它当然会失败:
NoMethodError (undefined method `id' for #<MongoMapper::Plugins::Querying::DecoratedPluckyQuery:0x007fb4b9e9f118>)
这是因为它实际上并不是一个Ruby对象,它仍然是查询代理。
现在我从根本上错过了一些东西,因为我从来没有读过“Ruby入门”指南 - 我只是在这里砸了我的路并通过蛮力学习。那么,我可以调用什么方法来获取Plucky Query的结果?
答案 0 :(得分:0)
如您所见,字段@adm
设置为查询。因此,要访问结果,您需要触发查询的执行。您可以调用多种激活方法,包括all
,first
和last
。有一些文档here。
在这种情况下,您可以执行以下操作:
adm_query = Admin.where({:id => {"$ne" => params[:id].to_s},:email => params[:email]})
@adm_user = adm_query.first
在检查nil
if @adm_user.nil?
# do something if no results were found
end
您还可以limit
查询结果:
adm_query = Admin.where( ... your query ...).limit(1)