Domanda

io non sono molto sicuro di come assicurare il mio caching sta funzionando, ma sono abbastanza sicuro che non è. Ho un regolatore di utenti con un'azione indice che io sono l'azione di cache fino a quando viene creato un nuovo utente. Ecco il codice:

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

  def create
    expires_action :index
    ...
  end
end

Ora, nei miei ceppi Quando accedo l'azione index, vedo:

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.

Non sono sicuro di quello che il filter chain halted ... did_not_yield è tutto e vedo anche che quel select * from users ... è sempre chiamato di volta in volta, che non è quello che mi aspettavo.

Qualcuno può illuminarmi su ciò che sta succedendo qui e perché questo non si comporta come ci si aspetta? vale a dire. perché l'User.all sarebbe in esecuzione quando l'uscita che tutta di ricorso avrebbe dovuto essere memorizzate nella cache?

È stato utile?

Soluzione

Il mezzo di messaggi filter chain halted che c'è un filtro intorno che ferma l'azione da chiamare. Questo è probabile che sia la cache di azione, che ferma l'azione reale accada. Essa non ha yield per l'azione, perché ha trovato qualcosa nella cache, come suggerito dal messaggio di sopra di esso.

Il User.all non dovrebbe essere eseguito a tutti, perché è in azione, ma qualsiasi prima di filtri otterrà eseguito. Se la pagina è dietro una qualche forma di autenticazione, che il controllo di autenticazione potrebbe aver innescato la chiamata SQL. Così si potrebbe desiderare di controllare due volte in cui il registro di SQL realmente viene da.

Inoltre, la sintassi corretta (secondo il rotaie guida almeno) per scadenza è:

expire_action :action => :index

Più informazioni: guide

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top