0

老实说 - 我不完全理解 ActiveRecord 的计算和分组方法是如何工作的。但是,该 api 似乎很清楚以下是正确的格式:

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

问题来自返回值——实际上并没有在 API 中的任何地方定义的东西,并且计数方法似乎会根据您提供的内容半随机地改变。至少在这里,它似乎没有任何意义:

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

数组中的第一个数字是我的位置 ID,已经足够好了。第二个是适当的计数 - 太棒了。

但是为什么它会以这种格式返回呢?为什么它们在指向 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 回答