从API控制器中过期application_controller缓存方法

时间:2015-08-19 17:57:22

标签: ruby-on-rails api ruby-on-rails-4 caching

我在application_controller上有以下方法:

控制器/ application_controller.rb

def set_footer_sponsored_links
  @sponsored_links = Rails.cache.fetch("sponsored_links", expires_in: 240.hours) {
        ContentGroup.sponsored_links
      }
end

此spons_links( ContentGroup.sponsored_links )是通过API创建和更新的:

控制器/ API / V1 / sponsored_links_controller.rb:

class Api::V1::FooterSponsoredLinksController < Api::V1::ApiController
  before_filter :set_sponsored_link, only: [:destroy, :update, :show]

  def create
    sponsored_link = SponsoredLink.create(sponsored_link_params)
    respond_with :api, sponsored_link
  end
  def update
    @sponsored_link.update(sponsored_link_params)
    respond_with :api, @sponsored_link
  end

我需要的是设置一个expire缓存方法或类似的方法,从API开始,在application_controller上的方法上缓存,只要调用:create,:update或:destroy。 知道如何做到这一点吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

首先,在名为Api::V1::FooterSponsoredLinksController的{​​{1}}中创建一个私有方法:

expire_links

然后为此方法添加... private def expire_links Rails.cache.delete('sponsored_links') end ,如下所示:

before_filter

答案 1 :(得分:0)

您应该使用包含最大updated_at DateTime的缓存键,如下所示:

def set_footer_sponsored_links
  @sponsored_links = Rails.cache.fetch("sponsored_links-#{SponsoredLink.maximum(:updated_at).try(:utc).try(:to_s, :number)}", expires_in: 240.hours) {
        ContentGroup.sponsored_links
      }
end