如何在控制器中获得Plucky Query的结果?

时间:2013-10-24 23:22:27

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

我遗漏了一些简单的事情 - 我想要在视图中访问此查询的结果。

以下是查询:

@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的结果?

1 个答案:

答案 0 :(得分:0)

如您所见,字段@adm设置为查询。因此,要访问结果,您需要触发查询的执行。您可以调用多种激活方法,包括allfirstlast。有一些文档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)