2012-04-19 72 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