0

我正在尝试按观看次数对节目列表进行排名。

现在,我有一个 Program 模型和一个属于该程序的 Views 模型。

在 Views.rb 我创建了一个 counter_cache:

belongs_to :program, counter_cache: :views_count

我可以使用 .views_count 对程序进行排序。然而,views_count 一直在更新,所以一个节目在 2 年前观看了 200 次,而今年根本没有观看,其排名将高于过去一个月观看 30 次的节目。

我希望能够指定在计算 views_count 时我只想考虑过去 30 天内发生的视图。

我尝试创建一个程序模型方法 recent_views 并在控制器中使用 sort_by ,但是它花费的时间太长并且经常超时。现在,我正在将 views_count 用于最近更新的程序,但这并不能解决这个问题。

在模型中是否有一种简单的方法可以做到这一点?

有没有办法创建一个单独的 counter_cache 只包括过去 30 天?

4

1 回答 1

1

使用自定义计数器缓存,按照此处的答案:Counter Cache for a column with conditions?

如果只使用最近 30 天的视图,您需要每天至少重新计算每行的计数列,以使计数保持最新。

于 2015-02-04T21:05:14.710 回答