Ruby on rails 如何在AciveRecord(Rails)中使用.group(:ip).count?

Ruby on rails 如何在AciveRecord(Rails)中使用.group(:ip).count?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我在Rails中有一个控制器,表中有如下数据示例: download_trackers [{ id: 1, file_name: "test.zip", ip: "192.168.0.27" }, { id: 2, file_name: "test.zip", ip: "192.168.0.27" }, { id: 3, file_name: "test.zip", ip: "192.168.0.20" }] 我想获取将按ip分组的数据,与下面的代码相同: DownloadTracker.

我在Rails中有一个控制器,表中有如下数据示例:

download_trackers
[{ id: 1, file_name: "test.zip", ip: "192.168.0.27" },
 { id: 2, file_name: "test.zip", ip: "192.168.0.27" },
 { id: 3, file_name: "test.zip", ip: "192.168.0.20" }]
我想获取将按
ip
分组的数据,与下面的代码相同:

DownloadTracker.group(:ip).count
#=> {"192.168.0.20"=>1, "192.168.0.27"=>2}
但这将返回一个count和IP地址的键值对。但我希望给定组中第一条记录的所有列在结果中计数为单独的列


我怎样才能做到这一点呢?

嘿,你可以用count找到给定表的所有列,用group找到给定表的所有字段

  @trackers = DownloadTracker.select("download_trackers.*,count(*) as count").group("ip")
它将返回给定组的第一条记录,在计数列中包含给定组的计数

如果您想要访问计数,只需使用

@trackers.first.count
如果您想将控制台上的count字段作为_json序列化程序作为打印当前结果

@trackers.as_json

实际上,
DownloadTracker.group(:ip).count
中的数据集是完全可用的。它不是一个数组,而是一个
散列
,一组值对。在这种情况下,键是IP,值是每个IP的出现次数

您可以像这样对其进行迭代:

DownloadTracker.group(:ip).count.each do |ip, count|
  # whatever you want
end

而且它与Rails无关,它是一种纯粹的Ruby方式来遍历散列。虽然很多人说不使用Ruby学习Rails是可以的,但您已经达到了无法接受的程度。所以你现在应该开始熟悉这门语言:)

DownloadTracker.group(:ip).count不可用吗?我觉得很好。你到底想要什么类型的数据???@VishalJAIN对象数组那么为什么要使用
count
?你能在这里放一些你想要的样本数据吗。