我在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。 知道如何做到这一点吗?
提前致谢
答案 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