ruby-on-rails-3 - index - render json rails 5
Renderizar una vista JBuilder en vista html (1)
He creado una vista json con JBuilder. Pero quiero precargar esto en un objeto de datos, para que Backbone tenga acceso a los datos desde el principio sin buscarlos.
¿Cómo puedo representar la vista list.json.jbuilder en mi vista list.html.erb?
Normalmente sin jbuilder, haría algo como esto:
<div data-list="<%= @contents.to_json %>"></div>
render
, cuando se llama desde dentro de una vista, devuelve una representación de cadena de la plantilla pasada o parcial; puedes insertar esa cadena en tu vista como quieras. Tenga en cuenta que
- Debe adjuntar el nombre de su plantilla con el sufijo / extensión de tipo. Si no lo hace, Rails puede confundirse sobre el archivo de plantilla que está llamando; es decir, podría elegir
list.html.erb
lugar delist.json.jbuilder
. Si está haciendo esta llamada desdelist.html.erb
, al intentar representarlist.html.erb
obtiene una recursión infinita y un SystemStackError. Usar la opción de:format
pararender
no parece funcionar. - Tienes que especificar la ruta calificada a la plantilla; no encontrará la plantilla correcta para "list.json" solo porque
list.json.jbuilder
reside en el mismo directorio quelist.html.erb
. - Debe pasar la salida de la llamada de
render
a través deraw
; de lo contrario, se escapará cuando se incruste en la vista.
Entonces, para su ejemplo, puede escribir esto, asumiendo que sus plantillas estaban en /app/views/foo
:
<div data-list="<%= raw render(:template => "foo/list.json", :locals => { :contents => @contents }) %>"></div>