Ruby Datamapper count not working

落爺英雄遲暮 提交于 2019-12-13 14:25:36

问题


From irb when I do:

Router.all(:email=>"blake@gmail.com")

I get a list of all the routers associated with that email. But when I do:

Router.count(:email=>"blake@gmail.com")

I always get 0

I've also looked at this question: Ruby Datamapper .count always returns 0 but I still don't know why it isn't working.

-- Update #1 --

Here is the output of the Router.all command. As you can see I get results back.

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">] 

But when I do Router.count as suggested it still is returning 0

1.9.3-p362 :004 > Router.count(:conditions => ["email = ?", "blake@gmail.com"])
=> 0 

1.9.3-p362 :005 > Router.count(:conditions => "email = 'blake@gmail.com'")
=> 0 

回答1:


As piyush pointed out, Router.all(:email=>"blake@gmail.com").count is the right way. DataMapper doesn't run the actual query before you call one of the "trigger" methods, such as all, first, last. This allows chaining several methods before calling a final .all to run the compound query.

In case of Router.count(:email=>"blake@gmail.com"), you're running a count on an "empty" DataMapper object, one that's been initialized but whose query hasn't run yet.




回答2:


You could require 'dm-aggregates', after which you can do

Router.count(:email => "blake@gmail.com")

and it'll get transformed into

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

(Although you'll get the same statement with Router.all(:email => "blake@gmail.com").count with dm-aggregates.)



来源:https://stackoverflow.com/questions/14393004/ruby-datamapper-count-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!