Как вызвать рельсовую подметальную машину в этом сценарии?
Как вы можете видеть из кода ниже. Я кеширую show
действие. У меня также есть следующий метод в действии шоу View.create_for(@song)
,
Я хотел бы сделать это так, когда View.create_for(@song)
вызывается, очищает соответствующий кеш.
Как бы я пошел по этому поводу? Нужно ли вручную вызывать подметальную машину в View
модель? Если так, то как?
Мой контроллер:
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
Мой Sweeper:
class SongsSweeper < ActionController::Caching::Sweeper
observe Song
def after_save(song)
expire_fragment(/songs\/#{song.id}\/.*?/)
end
end
1 ответ
Решение
Я думаю, что вы должны ссылаться на songs_sweeper, а не views_sweeper:
cache_sweeper :songs_sweeper, :only => [:show]
Я не уверен в ваших требованиях, но вы также можете более точно указать свой SongsSweeper, изменив after_save на after_create:
class SongsSweeper < ActionController::Caching::Sweeper
observe Song
def after_create(song)
expire_fragment(/songs\/#{song.id}\/.*?/)
end
end