0

在 Rails 应用程序中,我有一个 User 模型和一个 Posts 模型。

我有一个:post_rate方法

def self.post_rate(month_start, month_end)
     where('created_at >= ? AND <= ?', month_start, month_end).map { |p| p.created_at.beginning_of_day }.uniq.size.to_f / (month_start - month_end).to_f 
end

这显示了用户在给定时间范围内发布的天数百分比。

在用户展示页面上,我想按月显示用户发帖频率的摘要。我需要一个看起来像这样的数组:

['Month', 'Frequency'],
['Jan',  0.1],
['Feb',  0.5],
['Mar',  0.9],
etc..

(需要标签和标题)。

我怎样才能做到这一点?

我需要考虑哪些性能注意事项?

谢谢

4

1 回答 1

1

如果您的 Rails 足够新,您可以使用 ActiveRecord 的查询智能来编译在 SQL 中执行此操作的查询。您可以通过以下方式将函数传递给 GROUP BY 子句group

where('created_at >= ? AND <= ?', month_start, month_end).group("to_char(created_at,'MONTH')").count()

以上适用于 PostgreSQL。您可能必须更改 arg 以group使其与不同的数据库一起使用。

结果将采用散列的形式,其键是 GROUP BY 列,其值是计数。您可能需要做一些修改才能以您需要的格式获取数据。

于 2012-06-09T12:52:38.850 回答