2012-04-19 10 views
0

正直言って、私はActiveRecordの計算方法とグループ方法がどのように機能するのか完全に理解していません。しかし、APIには、次のこと正しい形式でかなり明確ようだ:奇妙なハッシュを返すActiveRecordカウントメソッド

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

問題は、戻り値から来ている - 実際にAPIにはどこにも定義されていないものを、カウント方法のために半変更するようですあなたがそれを食べることに基づいて - 無作為に。そして、ここでは少なくとも、それは意味をなさないと思われます:

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

その最初の数字は私の位置のidsです。 2番目は適切なカウントです - 素晴らしい。

しかし、なぜこの形式で戻ってくるのですか?なぜそれらは配列のハッシュにありますか?キーはnilを指していますか?これは/ここに返される/想定されるものであり、それはどのような目的に役立つのですか?

私は何かが不足しているように感じ、私が必要とする機能を信頼できるかどうかはわかりません。そして私はそれを変換することに熱心ではありません

{488 => 21, 464 => 1} 

手動で、私は一緒に暮らすことができる最後のビット。

誰でも私に明確化を提供できますか?

バージョン:Rubyの1.8.7、3.0.11

+0

[Count Returned Hashes]の可能な複製(http://stackoverflow.com/questions/12283847/count-returned -hashes) –

答えて

3

をRailsの本をお試しください:

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

それは返す必要があります:

{488=>24, 464=>1} 

UPDATE:のために働く 例私:

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には3つのレコードがあり、ユーザー2には1つのレコードがあります。

+0

いいえ...同じ奇妙なハッシュを返します。それは他のバージョンも同様に動作するはずです、と私は信じています。 – GlyphGryph

+0

さて、私はあなたのプロジェクトを知ることができません。 – megas

+0

私はバージョン番号を含んでいます - あなたが同じバージョンを使用しているならば、間違いなくそれを使ってローカルなものになっていなければなりません。実際には - 元の質問にも書かれている形式を使うのであれば、同じように動作しますか?ありがとう。 – GlyphGryph