如何在Rails中计算“有记录的日子”?

时间:2012-06-01 02:10:10

标签: ruby-on-rails

Rails为新记录添加并填充created_at列。

如何使用它来计算在指定时间范围内有记录的天数? (注意:计算天数,不计算记录)。

例如,假设我有一个Post模型,我如何计算去年有多少天有帖子?

1 个答案:

答案 0 :(得分:4)

既然你问过ruby方式,那就是:

Post.where('created_at >= ?', 1.year.ago).map { |p| p.created_at.beginning_of_day }.uniq.size

<强>更新

您可以在Post模型中添加以下内容

def self.number_of_days
  where('created_at >= ?', 1.year.ago).map { |p| p.created_at.beginning_of_day }.uniq.size
end

然后在你的控制器中你可以做像

这样的事情
@user.posts.number_of_days

这是一种将大部分工作委托给数据库的更有效方式(MySQL,不确定它是否适用于其他人):

Post.where('created_at >= ?', 1.year.ago).group('DATE(created_at)').length