Ruby on rails 3 如何在控制器中获得大胆查询的结果?
我缺少一些简单的东西-我不想在视图中访问此查询的结果 以下是查询:Ruby on rails 3 如何在控制器中获得大胆查询的结果?,ruby-on-rails-3,mongodb,mongomapper,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> 让BSON摆脱这一切。在修饰查询上尝试此操
@adm = Admin.where({:id => {"$ne" => params[:id].to_s},:email => params[:email]})
当然,当你检查时,你会得到:
@adm is #<MongoMapper::Plugins::Querying::DecoratedPluckyQuery:0x007fb4be99acd0>
让BSON摆脱这一切。在修饰查询上尝试此操作时,当然会失败:
NoMethodError (undefined method `id' for #<MongoMapper::Plugins::Querying::DecoratedPluckyQuery:0x007fb4b9e9f118>)
NoMethodError(未定义的#方法'id'))
这是因为它实际上还不是Ruby对象,它仍然是查询代理
现在我基本上错过了一些东西,因为我从来没有读过“Ruby入门”指南——我只是在这里破门而入,通过暴力学习。那么,我应该调用什么方法来获得大胆查询的结果呢?如您所见,字段
@adm
被设置为查询。因此,要访问结果,您需要触发查询的执行。您可以调用多种激活方法,包括all
、first
和last
。这里有一些文档
在这种情况下,您可以执行以下操作:
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
您还可以限制
查询结果:
adm_query = Admin.where( ... your query ...).limit(1)
虽然这似乎是答案——这不是我所希望的。我知道我的查询只有一个结果,所以我不想限制它或以任何方式对其进行操作。但是,唉,看来我必须这么做。这有什么关系呢?一旦它被查询,它就会被查询。我知道我只会得到一个结果,但我想基于where语句而不是“按id查找”或类似语句进行模糊查询。但是我必须使用find_by_X方法,这没关系,因为我还没有在搜索一个我还不知道的ID时绊倒自己。有时,当我不知道我想使用的ID,但我知道另一个字段中的值时,我更容易通过该字段进行搜索-但这意味着我的逻辑从一开始就很糟糕,我猜。。。
adm_query = Admin.where( ... your query ...).limit(1)