Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何在控制器中获得大胆查询的结果?_Ruby On Rails 3_Mongodb_Mongomapper - Fatal编程技术网

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)