我试图按照观看次数对节目列表进行排名。
现在,我有一个程序模型和一个属于程序的视图模型。
在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?
答案 0 :(得分:1)
使用自定义计数器缓存,按照此处的答案:Counter Cache for a column with conditions?
如果仅使用过去30天的观看次数,您需要每天至少重新计算一行的每个计数列,以使计数保持最新。