2011-05-19 29 views
5

Estoy confundido acerca de cómo usar json en mi aplicación carriles (2.3.5). Estos son los elementos que necesito:Cómo caché JSON en ruby ​​on rails?

  1. plantilla html
  2. datos JSON
  3. javascript para representar datos en la plantilla (utilizo PURE) datos

JSON, calculados usando métodos de ayuda (rieles y mis propios), es bastante grande y no cambia a menudo (en general, es pie de página, encabezado y algunas otras partes de la página), por lo que debe estar en la memoria caché. ¿Cuál es la forma correcta de hacerlo?

me trataron 3 enfoques.

A.

- html template and javascript to render data placed in the view html.erb 
- method to get json data placed in the helper 
    <script type="text/javascript"> 
     var data= <%= helper_method %>; 
    </script> 

problema: cómo almacenar en caché los datos JSON?

B.

- html template and javascript to render data placed in the view html.erb 
- method to get json data is a controller action 
    def footer 
     expires_in(4.hours) 
     render :json => { calculated_data } 
    end 
- ajax request in javascript 
     $.ajax({ 
     type: "GET", 
     url: "<%=footer_path %>", 
     success: function(data){ 
      render json data in html template 
     } 
     }); 

Problema: segunda petición de enviar al servidor ...

C.

- html template and javascript to render data placed in the view html.erb 
- method to get json data is a controller action 
    def footer 
     expires_in(4.hours) 
     render :json => { calculated_data } 
    end 
- data in javascript 
    <script type="text/javascript" src="<%=footer_path %>"> 
    </script> 

problemas: ¿cómo puedo pasar resultado de esa secuencia de comandos para una variable que puedo usar en el javascript que representa los datos en la plantilla?

En el caso de B y C, es necesario incluir ayudantes en el controlador (métodos para calcular datos json), que es una solución bastante desagradable.

cuál debería ser la solución correcta para esto? ¿Qué enfoque es el apropiado para esto?

Gracias por todas las sugerencias.

Respuesta

15

No hay respuestas, pero he encontrado una solución. Para aquellos que podrían tener problema similar, tal vez va a ahorrar tiempo para alguien ...

Solía ​​enfoque A y caché de los carriles. Tengo un método en el ayudante

def footer 
    return Rails.cache.fetch('footer', :expires_in => 4.hours){ 
    caluclate_data_with_other_methods.to_json 
    } 
end 

Sólo este ...

+2

Gracias por tomarse el tiempo para volver y publicar la solución, eres un héroe de la internet: p –