我在application_controller上有以下方法:
控制器/应用程序控制器
def set_footer_sponsored_links
@sponsored_links = Rails.cache.fetch("sponsored_links", expires_in: 240.hours) {
ContentGroup.sponsored_links
}
end这个sponsored_links (ContentGroup.sponsored_links)是通过API创建和更新的:
controllers/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我需要的是在调用create、:update或: application_controller时,设置一个过期缓存方法或类似的方法,这些方法从API中在上的方法上过期。你知道怎么做到吗?
提前感谢
发布于 2015-08-19 18:24:13
首先,在Api::V1::FooterSponsoredLinksController中创建一个名为expire_links的私有方法
...
private
def expire_links
Rails.cache.delete('sponsored_links')
end然后为该方法添加一个before_filter,如下所示:
before_filter :expire_links, only: [:create, :update, :destroy]发布于 2015-08-19 18:23:47
您可能应该使用包含最大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
}
endhttps://stackoverflow.com/questions/32102458
复制相似问题