Ruby on rails ActiveRecord计数方法返回一个奇怪的散列
老实说,我不完全理解ActiveRecord的计算和分组方法是如何工作的。但是,api似乎非常清楚以下格式是否正确:Ruby on rails ActiveRecord计数方法返回一个奇怪的散列,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,老实说,我不完全理解ActiveRecord的计算和分组方法是如何工作的。但是,api似乎非常清楚以下格式是否正确: Locations.images.count(:image_id, :group => "location_id") 问题来自于返回值——API中没有实际定义的东西,对于计数方法,它似乎会根据您提供的内容半随机地改变。至少在这里,这似乎没有任何意义: {[488, 21]=>nil, [464, 1]=>nil} 数组中的第一个数字是我的位置ID,很好。第二
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试试这个:
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有三条记录,用户2有一条记录。试试这个:
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有三条记录,用户2有一条记录。不。。。返回相同的奇怪散列。我相信,其他版本也应该是这样工作的。嗯,我不知道你的项目,我只能举我的例子-见更新。我已经包括了版本号-如果你使用的是同一个版本,肯定是本地的东西弄乱了它,至少我算是一种解决方案。事实上,如果你也使用原始问题中提供的格式,它是否也可以这样工作?谢谢,不。。。返回相同的奇怪散列。我相信,其他版本也应该是这样工作的。嗯,我不知道你的项目,我只能举我的例子-见更新。我已经包括了版本号-如果你使用的是同一个版本,肯定是本地的东西弄乱了它,至少我算是一种解决方案。事实上,如果你也使用原始问题中提供的格式,它是否也可以这样工作?谢谢。可能的副本可能的副本