如何使用counter_cache仅使用过去30天的数据进行订购

时间:2015-02-04 19:14:10

标签: ruby-on-rails counter-cache

我试图按照观看次数对节目列表进行排名。

现在,我有一个程序模型和一个属于程序的视图模型。

在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用于最近更新的程序,但这并没有解决这个问题。

在模型中有一种简单的方法吗?

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

1 个答案:

答案 0 :(得分:1)

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

如果仅使用过去30天的观看次数,您需要每天至少重新计算一行的每个计数列,以使计数保持最新。