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
War es hilfreich?

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:

  1. Ist es ein Verstorbener von ActivereCord :: Base?
  2. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top