Ruby on rails 如何在AciveRecord(Rails)中使用.group(:ip).count?
我在Rails中有一个控制器,表中有如下数据示例: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.
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
?你能在这里放一些你想要的样本数据吗。