Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord计数方法返回一个奇怪的散列_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails ActiveRecord计数方法返回一个奇怪的散列

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,很好。第二

老实说,我不完全理解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

试试这个:

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有一条记录。

不。。。返回相同的奇怪散列。我相信,其他版本也应该是这样工作的。嗯,我不知道你的项目,我只能举我的例子-见更新。我已经包括了版本号-如果你使用的是同一个版本,肯定是本地的东西弄乱了它,至少我算是一种解决方案。事实上,如果你也使用原始问题中提供的格式,它是否也可以这样工作?谢谢,不。。。返回相同的奇怪散列。我相信,其他版本也应该是这样工作的。嗯,我不知道你的项目,我只能举我的例子-见更新。我已经包括了版本号-如果你使用的是同一个版本,肯定是本地的东西弄乱了它,至少我算是一种解决方案。事实上,如果你也使用原始问题中提供的格式,它是否也可以这样工作?谢谢。可能的副本可能的副本