Pregunta

Cuando tengo 2 puntos de vista que la caché fragmento de la misma consulta pero muestran de manera diferente, no es sólo un fragmento de la pantalla y los dos de la misma manera. ¿Hay alguna forma de evitar esto? Por ejemplo ...

#views/posts/list
    - cache(@posts) do
         - for p in @posts
              = p.title

#views/posts/list_with_images
    - cache(@posts) do
         - for p in @posts
              = p.title
              = p.content
              = image_tag(p.image_url)

#controllers/posts_controller
     def list
        ...
        @posts = Post.all
     end

     def list_with_images
        ...
        @posts = Post.all
     end
¿Fue útil?

Solución

Se tiene que utilizar una clave única caché. Si pase simple en un objeto que llama al método cache_key en él para determinar la clave. Si se pasa en una gran variedad de objetos, cache generará una clave uniendo las claves de caché de todos los elementos de la matriz. Usted puede usar esto para arreglar el problema a través de:

#views/posts/list
    - cache([:list, @posts]) do
         - for p in @posts
              = p.title

#views/posts/list_with_images
    - cache([:list_with_images, @posts]) do
         - for p in @posts
              = p.title
              = p.content
              = image_tag(p.image_url)

Otros consejos

lo he descubierto.

En primer lugar, el objetivo de esta estrategia es hacer uso de las claves de caché inteligente en los carriles, que auto-generar claves únicas basadas en el nombre del modelo, ID y updated_at atributos.

¿Qué pasa si usted tiene contenido que se refiere a dos modelos? Existe una convención para esta incorporado, sólo tiene que utilizar una matriz:

- cache([@posts, @user]) do

Y esto sólo añade una clave de usuario a la clave de los mensajes, de modo que si o bien se actualiza la memoria caché expira automáticamente. Se puede utilizar esta misma convención para añadir información adicional a la tecla en forma de una cadena simple. Esto es útil para distinguir entre los fragmentos que se basan en la misma consulta, sino que requieren diferentes puntos de vista, y es la respuesta a la pregunta anterior.

- cache([@posts, "lists"]) do

y luego en el otro uso página

- cache([@posts, "list_with_images"]) do

y esto creará dos fragmentos separados que no se confundan con los demás.

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