首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在这种情况下如何调用rails清除器?

在这种情况下如何调用rails清除器?
EN

Stack Overflow用户
提问于 2012-01-20 17:57:56
回答 1查看 215关注 0票数 0

正如您从下面的代码中所看到的。我正在缓存show操作。我在show action View.create_for(@song)中也有以下方法。

我想这样做,当View.create_for(@song)被调用时,它会清除相应的缓存。

我该怎么做呢?我必须手动调用View模型中的rails清除器吗?如果是这样的话,是怎么做的?

我的控制器:

代码语言:javascript
复制
class SongsController < ApplicationController
  caches_action :show, :cache_path => (proc do 
    song_path(params[:id], :user_id => user_signed_in? ? current_user.id : nil)
  end)

  # I tried with the following line, but this is not what I want. I only want to call the sweeper when `View.create_for(@song)` is called:
  # cache_sweeper :views_sweeper, :only => [:show]

  def show
    @song = Song.find(params[:id])
    View.create_for(@song)
  end
end

我的清道夫:

代码语言:javascript
复制
class SongsSweeper < ActionController::Caching::Sweeper
  observe Song

  def after_save(song)
    expire_fragment(/songs\/#{song.id}\/.*?/)
  end
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-23 03:28:28

我认为你应该指的是songs_sweeper,而不是views_sweeper:

代码语言:javascript
复制
cache_sweeper :songs_sweeper, :only => [:show]

我不确定您的需求,但您也可以通过将after_save更改为after_create来在您的SongsSweeper中更具体:

代码语言:javascript
复制
class SongsSweeper < ActionController::Caching::Sweeper
  observe Song

  def after_create(song)
    expire_fragment(/songs\/#{song.id}\/.*?/)
  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8939561

复制
相关文章

相似问题

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