Frage

Ich bin mir nicht ganz sicher, wie ich sicherstellen kann, dass mein Caching funktioniert, aber ich bin mir ziemlich sicher, dass dies nicht der Fall ist. Ich habe einen Benutzer -Controller mit einer Indexaktion, die ich um eine Aktion eingestuft habe, bis ein neuer Benutzer erstellt wurde. Hier ist der Code:

UsersController < ApplicationController
  caches_action :index
  def index
    @users = User.all
  end

  def create
    expires_action :index
    ...
  end
end

Jetzt in meinen Protokollen, wenn ich auf die zugreife index Aktion, ich sehe:

Cached fragment hit: views/localhost:3000/users (0.0ms)
Filter chain halted as [#<ActionController::Filters::AroundFilter:0xe2fbd3 @identifier=nil, @kind=:filter, @options={:only=>#<Set: {"index", "new"}>, :if=>nil, :unless=>nil}, @method=#<Proc:0x186cb11@/Users/bradrobertson/.rvm/gems/jruby-1.5.3/gems/actionpack-2.3.10/lib/action_controller/caching/actions.rb:64>>] did_not_yield.

Ich bin mir nicht sicher, was die filter chain halted ... did_not_yield Es geht alles um und ich sehe das auch das select * from users... wird jedes Mal aufgerufen, was ich nicht erwartet habe.

Kann mich jemand aufklären, was hier vor sich geht und warum sich das nicht so verhält, wie ich es erwarten würde? dh. Warum der Benutzer. Alle würden ausgeführt, wenn die Ausgabe der gesamten Aktion zwischengespeichert werden sollte?

War es hilfreich?

Lösung

Das filter chain halted Nachricht bedeutet, dass es einen Umgebungsfilter gibt, der die Aktion anruft. Dies ist wahrscheinlich der Aktionscache, der die wirkliche Aktion verhindert. Es hat nicht Ertrag zur Aktion, weil es etwas im Cache gefunden hat, wie in der oben genannten Nachricht vorgeschlagen.

Das User.all Sollte überhaupt nicht ausgeführt werden, weil es in der Aktion ist, aber alle Filter werden ausgeführt. Wenn Ihre Seite hinter einer Authentifizierungsform steht, könnte die Authentifizierungsprüfung möglicherweise den SQL -Aufruf ausgelöst. Vielleicht möchten Sie überprüfen, woher das SQL -Protokoll wirklich stammt.

Außerdem ist die richtige Syntax (zumindest nach dem Rails Guide) zum Ablauf:

expire_action :action => :index

Mehr Info: Rails Guide

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