Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/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
Ruby数据映射器计数不工作_Ruby_Sinatra_Ruby Datamapper - Fatal编程技术网

Ruby数据映射器计数不工作

Ruby数据映射器计数不工作,ruby,sinatra,ruby-datamapper,Ruby,Sinatra,Ruby Datamapper,当我这样做时,来自irb: Router.all(:email=>"blake@gmail.com") Router.count(:email=>"blake@gmail.com") 我得到了一份与那封邮件相关的所有路由器的列表。但当我这样做的时候: Router.all(:email=>"blake@gmail.com") Router.count(:email=>"blake@gmail.com") 我总是得到0分 我也看过这个问题:但我仍然不知道为什么它不起

当我这样做时,来自irb:

Router.all(:email=>"blake@gmail.com")
Router.count(:email=>"blake@gmail.com")
我得到了一份与那封邮件相关的所有路由器的列表。但当我这样做的时候:

Router.all(:email=>"blake@gmail.com")
Router.count(:email=>"blake@gmail.com")
我总是得到0分

我也看过这个问题:但我仍然不知道为什么它不起作用

--更新#1--

这是Router.all命令的输出。正如你所看到的,我得到了结果

1.9.3-p362 :003 > Router.all(:email=>"blake@gmail.com")
=> [#<Router @id=8 @email="blake@gmail.com" @hostname="router0">, #<Router @id=9              @email="blake@gmail.com" @hostname="router0">, #<Router @id=10 @email="blake@gmail.com" @hostname="router0">, #<Router @id=11 @email="blake@gmail.com" @hostname="router0">, #<Router @id=13 @email="blake@gmail.com" @hostname="router0">, #<Router @id=14 @email="blake@gmail.com" @hostname="router0">, #<Router @id=15 @email="blake@gmail.com" @hostname="router0">, #<Router @id=16 @email="blake@gmail.com" @hostname="router0">] 

正如皮尤斯所指出的,
Router.all(:email=>)blake@gmail.com)计数
是正确的方法。在调用其中一个“触发器”方法之前,DataMapper不会运行实际查询,例如
all
first
last
。这允许在调用最终的
.all
之前链接多个方法以运行复合查询


如果是
Router.count(:email=>)blake@gmail.com”
,您正在对一个“空”DataMapper对象运行计数,该对象已初始化,但其查询尚未运行。

您可以
要求“dm aggregates”
,然后可以执行此操作

Router.count(:email => "blake@gmail.com")
它会变成

SELECT COUNT(*) FROM routers WHERE "email" = 'blake@gmail.com'

(尽管您将在
Router.all(:email=>)中得到相同的语句)blake@gmail.com“).count
dm聚合

路由器。count返回的值不是0?路由器呢。all(:email=>”blake@gmail.com)计数?您是否
要求“dm聚合”
?@morbusg,
count
方法是核心的一部分,而不是
dm-aggregates
@Arman:
Model.count(约束\u散列)
使用
dm-aggregates
可以得到一条
SELECT-count
SQL语句。因此,计数是在SQL端完成的,因此,应该执行得更好。