gpt4 book ai didi

ruby-on-rails - Rails ActiveRecord 按时间分组但用 nil 值填充日期?

转载 作者:行者123 更新时间:2023-12-04 03:52:59 24 4
gpt4 key购买 nike

所以我使用 activerecord 来获取某一天的项目数:

Item.group("date(created_at)").count.values

但是如果某一天没有记录,这不会给我 0,我该如何解决这个问题?还是有更多的“Rails”方式来处理这样的事情?

非常感谢任何帮助,再次感谢!

最佳答案

使用 GROUP BY 查询,您将根据现有记录获取分组,因此如果分组列中没有具有给定值的记录,则不会有该值的分组。数据库并不知道添加您可能感兴趣的其他日期值。

要获得您想要的结果,我会做的是创建一个默认值为 0 的新哈希,然后将您的查询结果合并到其中。当您随后尝试从没有条目的哈希中检索任何值时,您将得到 0 作为结果。

编辑:删除 .values

date_counts = Hash.new(0)
date_counts.merge! Item.group("date(created_at)").count

或者,如果您想确保范围内每个日期的哈希中都有条目,那么您可以迭代这些条目,...

date_counts = {}
(Date.civil(2010,1,1)...Date.civil(2010,2,1)).each do |date|
date_counts[date]=0
end
date_counts.merge! Item.group("date(created_at)").count

更新

这是我将日期范围和模型传递到这里时的一些输出,奇怪的是它得到了不同长度的哈希值:

{Sun, 01 May 2011=>0, Mon, 02 May 2011=>0, Tue, 03 May 2011=>0, Wed, 04 May 2011=>0, Thu, 05 May 2011=>0, Fri, 06 May 2011=>0, Sat, 07 May 2011=>0, Sun, 08 May 2011=>0, Mon, 09 May 2011=>0, Tue, 10 May 2011=>0, Wed, 11 May 2011=>0, Thu, 31 Mar 2011=>2, Sun, 03 Apr 2011=>1, Fri, 08 Apr 2011=>643, Sat, 09 Apr 2011=>2360, Sun, 10 Apr 2011=>705, Mon, 11 Apr 2011=>34}
{Sun, 01 May 2011=>0, Mon, 02 May 2011=>0, Tue, 03 May 2011=>0, Wed, 04 May 2011=>0, Thu, 05 May 2011=>0, Fri, 06 May 2011=>0, Sat, 07 May 2011=>0, Sun, 08 May 2011=>0, Mon, 09 May 2011=>0, Tue, 10 May 2011=>0, Wed, 11 May 2011=>0, Sat, 02 Apr 2011=>1, Fri, 08 Apr 2011=>4158, Sat, 09 Apr 2011=>12206, Sun, 10 Apr 2011=>4279, Mon, 11 Apr 2011=>169}
{Sun, 01 May 2011=>0, Mon, 02 May 2011=>0, Tue, 03 May 2011=>0, Wed, 04 May 2011=>0, Thu, 05 May 2011=>0, Fri, 06 May 2011=>0, Sat, 07 May 2011=>0, Sun, 08 May 2011=>0, Mon, 09 May 2011=>0, Tue, 10 May 2011=>0, Wed, 11 May 2011=>0}

不确定是什么原因造成的...嗯。

关于ruby-on-rails - Rails ActiveRecord 按时间分组但用 nil 值填充日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5631141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com