render
, quando viene chiamato dall'interno di una vista, restituisce un rendering di stringa del modello passato o parziale; puoi incorporare quella stringa nella tua vista come preferisci. Si noti però che:
- È necessario aggiungere il nome del modello con il suffisso/estensione del tipo. In caso contrario, Rails potrebbe confondersi su quale file di modello stai chiamando; vale a dire: potrebbe scegliere
list.html.erb
anziché list.json.jbuilder
. Se effettui questa chiamata dalist.html.erb
, prova a eseguire il rendering di list.html.erb
in ricorsione infinita e SystemStackError. L'utilizzo dell'opzione :format
per render
non sembra funzionare.
- È necessario specificare il percorso qualificato per il modello; non troverà il modello giusto per "list.json" solo perché
list.json.jbuilder
risiede nella stessa directory di list.html.erb
.
- È necessario passare l'uscita della chiamata
render
tramite raw
; altrimenti, verrà scappato quando viene incorporato nella vista.
Quindi, per il vostro esempio, si potrebbe scrivere questo, assumendo i modelli erano in /app/views/foo
:
<div data-list="<%= raw render(:template => "foo/list.json", :locals => { :contents => @contents }) %>"></div>
fonte
2014-12-11 22:20:48
Questo è un PROTIP! Grazie. Puoi anche usare '<%== %>' invece di 'raw' –
Mi è stato chiesto di rendere un partial html come json propery con jbuilder. render esegue il lavoro anche qui json.prop render (: template => 'partials/_resort_summary',: locals => {resort: @resort}) – dc10
Grazie mille. Ho passato un po 'di tempo a capire come farei questo. –