Rails Caching: Verwenden von Kehrmaschinen für Aktionen, die Parameter erfordern
-
24-10-2019 - |
Frage
Ich versuche, Kehrmaschinen zu verwenden, um meine Seiten -Aktualisierung zu verarbeiten. Zum Auffrischen von Indexaktionen usw. funktioniert alles gut ... aber ich kann nicht den Kehrmaschinen, Seitenparameter zu interpretieren. Wenn mir jemand sagen kann, was mit dem folgenden Code los ist, wäre ich sehr dankbar:
Regler:
class PostsController < ApplicationController
load_and_authorize_resource
cache_sweeper :post_sweeper, :only => [:create, :update, :destroy]
caches_page :index
caches_page :show
caches_action :edit, :new
# This refreshes cache correctly
def index
@posts = Post.all
end
# Dies schafft Cache, aktualisiert ihn aber (niemals). Wenn ich den Befehl expire_page direkt in die Aktion (anstelle der Kehrmaschine) aufstelle, funktioniert es einwandfrei
def update
@post = Post.find(params[:id])
respond_to do |format|
if @post.update_attributes(params[:post])
flash[:notice] = t(:post_updated)
format.html { redirect_to(@post) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @post.errors, :status => :unprocessable_entity }
end
end
end
Die Kehrmaschine:
class PostSweeper < ActionController::Caching::Sweeper
observe Post
def after_create(record)
expire_cache_for_index(record)
end
def after_update(record)
expire_cache_for_index(record)
expire_cache_for_post(record)
expire_cache_for_edit(record)
end
def after_destroy(record)
expire_cache_for_index(record)
expire_cache_for_post(record)
expire_cache_for_edit(record)
end
private
def expire_cache_for_index(record)
expire_page :controller => 'posts', :action => 'index'
end
def expire_cache_for_post(record)
expire_page :controller => 'posts', :action => 'show', :id => record.id
end
def expire_case_for_edit(record)
expire_action :controller => 'posts', :action => 'edit', :id => record.id
end
end
Lösung
Wenn wir davon ausgehen, dass Sie den Code kopieren und eingefügt haben, befindet sich auch der Tippfehler in Ihrem Code. Da Sie mit Rails nicht mit einem Fehler mit einem Fehler gekennzeichnet wurden, können wir dann annehmen, dass die Kehrer nicht aufgerufen werden. (dh der After_Update wird nicht aufgerufen). Ich würde einige Logger -Nachrichten hinzufügen, um zu überprüfen, ob dies wirklich der Fall ist.
Bei Fragen geht es um Post:
- Ist es ein Verstorbener von ActivereCord :: Base?
- Haben Sie andere Rückrufe, die falsch zurückkehren und so die Kette stoppen?
Die Kehrmaschinenbeispiele im Netz setzen die Cache_Sweeper -Zeile konsequent ein nach Die Caches_XXX -Zeilen. Ich wäre überrascht, wenn das einen Unterschied macht, aber es lohnt sich, es zu überprüfen.