2012-04-19 94 views
0

我会诚实 - 我不完全理解ActiveRecord的计算和分组方法如何工作。但是,该API似乎以下是正确的格式非常清楚:ActiveRecord计数方法返回一个奇怪的散列

Locations.images.count(:image_id, :group => "location_id") 

的问题来自于返回值 - 这是不实际的API中定义的任何地方的东西,并为计数方法似乎改变半随意根据你喂它。至少在这里,它似乎没有任何意义:

{[488, 21]=>nil, [464, 1]=>nil} 

该数组中的第一个数字是我的位置id,足够好。第二个是适当的数量 - 真棒。

但为什么它是以这种格式返回?为什么他们在散列的数组中作为键指向零?这是/应该/将在这里返回,它的目的是什么?

我觉得我错过了一些东西,就像我不确定是否可以信任该功能来做我所需要的。而我并不那么热衷于将其转换为

{488 => 21, 464 => 1} 

手动,但最后一点我可以住。

任何人都可以提供我一些澄清?

版本:1.8.7的Ruby,Rails的3.0.11

+0

[Count Returned Hashes](http://stackoverflow.com/questions/12283847/count-returned) - 散列) – 2014-07-24 01:59:07

回答

3

试试这个:

Locations.images.group('location_id').count 

它应该返回:

{488=>24, 464=>1} 

UPDATE: 的其中工程例如me:

Lexeme.all 
    Lexeme Load (0.2ms) SELECT "lexemes".* FROM "lexemes" 
+----+---------+---------+---------+---------------------+---------------------+ 
| id | user_id | word_id | counter | created_at   | updated_at   | 
+----+---------+---------+---------+---------------------+---------------------+ 
| 1 | 1  | 1  | 3  | 2012-04-12 21:37... | 2012-04-12 21:37... | 
| 2 | 1  | 2  | 4  | 2012-04-12 21:38... | 2012-04-12 21:38... | 
| 3 | 1  | 3  | 5  | 2012-04-12 21:38... | 2012-04-12 21:38... | 
| 4 | 2  | 5  | 3  | 2012-04-19 16:28... | 2012-04-19 16:28... | 
+----+---------+---------+---------+---------------------+---------------------+ 

Lexeme.group('user_id').count 
    (0.2ms) SELECT COUNT(*) AS count_all, user_id AS user_id FROM "lexemes" GROUP BY user_id 
=> {1=>3, 2=>1} 

正如您所看到的,用户1有三条记录,用户2有一条记录。

+0

不...返回相同的奇怪散列。我相信,这也是另一个版本应该如何运作的。 – GlyphGryph 2012-04-19 17:03:44

+0

嗯,我不能意识到你的项目,我只能把我的例子 - 看到更新。 – megas 2012-04-19 17:06:11

+0

我已经包含了版本号 - 如果你使用的是相同的版本,肯定必须是本地的一些东西,我至少应该算作一种解决方案。其实 - 如果你使用原始问题中提供的格式,它是否也以这种方式工作?谢谢。 – GlyphGryph 2012-04-19 17:09:07