Pregunta

Estoy tratando de usar barredoras para manejar las actualizaciones de mi página. Para acciones de índice refrescantes, etc. todo funciona bien ... pero parece que no puedo interpretar los parámetros de la página. Si alguien puede decirme qué hay de malo en el código a continuación, estaría muy agradecido:

Controlador:

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

# Esto crea caché, pero no lo refresca (nunca). Si coloco el comando expire_page directamente en la acción (en lugar del barrendero), funciona bien

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

El barrendero:

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
¿Fue útil?

Solución

Si asumimos que copia y pegó el código, entonces el error tipográfico también está en su código. Como no fue marcado con un error de Rails, podemos suponer que no se llaman a los barredoras. (es decir, no se llama a After_Update). Agregaría algunos mensajes de registrador para verificar que ese sea realmente el caso.

Las preguntas son sobre la publicación:

  1. ¿Es un difunto de Activerecord :: Base?
  2. ¿Tiene otras devoluciones de llamada que regresan falsas y, por lo tanto, detienen la cadena?

Los ejemplos del barrendero en la red colocan constantemente la línea cache_sweeper después Las líneas Caches_XXX. Me sorprendería si eso marca la diferencia, pero vale la pena echarle un vistazo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top