Tengo problemas para responder con JSON a la solicitud json, mientras tengo habilitado el almacenamiento en caché de acciones.Caché de acciones de Rails y respuestas json
Tengo un controlador bastante simple que responde tanto a JSON como a HTML y el almacenamiento en caché funciona bien para la respuesta HTML, pero me di cuenta cuando solicito JSON y normalmente respondo con JSON, pero con la caché activa habilitada, ajusta el JSON salida en el diseño!
Cuando borra la cache, me da un error que no existe ninguna disposición por defecto:
ArgumentError en ClipsController N.º
No hubo diseño predeterminado para ClipsController en ...
¿Cómo devuelvo JSON para la acción en caché?
UPDATE, sospecho que el error sobre el diseño tiene que ver con la forma en cacheamos las acciones:
caches_action :index, :layout => false
No estoy seguro sin embargo, ¿por qué todavía tendría un diseño en el caso de una respuesta JSON, ya que sin almacenamiento en caché no hay problema.
temporalmente he modificado el filtro de caché para no almacenar en caché las solicitudes JSON, pero esto no es una solución ideal, ¿qué hago si quiero almacenar en caché JSON?
caches_action :index, :layout => false, :if => Proc.new { |c| !c.request.format.json? }
¡Problema interesante! He pasado un tiempo investigando esto, y parece ser un error que se agregó en Rails 3 ... No pude hacer que esto funcionara correctamente para mí, pero http://blog.blazingcloud.net/2010/11/21/caching-in-rails/mentions poniendo layout: falso en su before_filter, lo que podría aliviar sus problemas. Lo siento, no pude ayudar más. – sgrif
Gracias. Su solución hizo el truco para mi aplicación Rails 3.2.8. Estoy almacenando en caché las solicitudes JS en el navegador ahora, solo agregué response.headers ["Cache-Control"] = "max-age = 600, debe-revalidar" en el controlador y "cache: true" en la solicitud de Jquery.Ajax. –
Supongo que ha intentado 'render json:' cuando desea devolver específicamente JSON? – Raf