在哪里保留站点范围的计数器,Rails

时间:2017-04-27 21:16:54

标签: ruby-on-rails

Newb开发者。需要在网站上放置一些计数某些歌曲播放次数的计数器。它与歌曲模型有关,但并非必须是,而不是任何一个歌曲实例。只是想知道我在哪里放置一个像常数一样的计数器?

if Subscription.where("band_id = ? and fan_id = ?", @band.id, @fan.id).any? && @fan.donating 
      @song.total_sub_donate_plays += 1
      @song.total_month_sub_donate_plays += 1

      site_wide.counter_total +=1
      site_wide.counter_total_month += 1
end

1 个答案:

答案 0 :(得分:0)

如果您有memcached / redis设置,请使用Rails.cache

http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html#method-i-increment

类似的东西:

if Subscription.where("band_id = ? and fan_id = ?", @band.id, @fan.id).any? && @fan.donating 
  @song.total_sub_donate_plays += 1
  @song.total_month_sub_donate_plays += 1

  Rails.cache.increment("stats/counters/total")
  Rails.cache.increment("stats/counters/#{Date.current.strftime("%Y/%m")}", {expires_in: 40.days})
end

然后你可以:

Rails.cache.read("stats/counters/total")
Rails.cache.read("stats/counters/#{Date.current.strftime("%Y/%m")}")

另一个选项是创建聚合数据表。从长远来看,这将让你有更多的控制权。

类似的东西:

class DailySongData
  # event_date: date,
  # sub_count:integer
  # listing_count:integer
end

这将有助于整理您的数据以供将来学习