首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从API控制器终止application_controller缓存方法

从API控制器终止application_controller缓存方法
EN

Stack Overflow用户
提问于 2015-08-19 17:57:22
回答 2查看 76关注 0票数 0

我在application_controller上有以下方法:

控制器/应用程序控制器

代码语言:javascript
复制
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:

代码语言:javascript
复制
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中在上的方法上过期。你知道怎么做到吗?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-19 18:24:13

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

代码语言:javascript
复制
...

private

def expire_links
  Rails.cache.delete('sponsored_links')
end

然后为该方法添加一个before_filter,如下所示:

代码语言:javascript
复制
before_filter :expire_links, only: [:create, :update, :destroy]
票数 1
EN

Stack Overflow用户

发布于 2015-08-19 18:23:47

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32102458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档