0

正直に言うと、ActiveRecordの計算方法とグループ化方法がどのように機能するかを完全には理解していません。ただし、APIは、次の正しい形式であるとかなり明確に見えます。

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

問題は戻り値に起因します。これはAPIのどこにも実際には定義されておらず、countメソッドの場合はフィード内容に基づいて半ランダムに変化するようです。そしてここでは、少なくとも、それは意味をなさないようです:

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

配列の最初の番号は私のロケーションIDであり、十分です。2番目は適切な数です-素晴らしい。

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

何かが足りないような気がしますし、必要なことを実行する関数を信頼できるかどうかわからないようです。そして、私はそれをに変換する必要があることにそれほど熱心ではありません

{488 => 21, 464 => 1}

手動で、しかし私が生きることができる最後のビット。

誰かが私にいくつかの説明を提供できますか?

バージョン:Ruby 1.8.7、Rails 3.0.11

4

1 に答える 1

3

これを試して:

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

戻るはずです:

{488=>24, 464=>1}

更新:私のために働く例:

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つのレコードがあります。

于 2012-04-19T16:31:54.957 に答える