0

我遗漏了一些简单的东西 - 我不想在视图中访问此查询的结果。

这是查询:

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

4

1 回答 1

0

@adm如您所见,该字段设置为查询。因此,要访问结果,您需要触发查询的执行。您可以调用多种激活方法,包括allfirstlast这里有一些文档。

在这种情况下,您可以执行以下操作:

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)
于 2013-10-25T00:53:39.173 回答