Ho un controller che risponde sia a html
sia a js
. La vista html
esegue il rendering dell'intera pagina (inclusi l'intestazione e il piè di pagina), mentre lo js
sostituisce solo #main
. A parte l'intestazione e il piè di pagina, entrambi i formati rendono lo stesso contenuto. Posso ottenere questo effetto con tre file:Rails: rendering di una vista (non parziale) da una vista
_show.html.erb
<div>Content!</div>
show.html.erb
<%= render "show" %>
show.js.erb
$("#main").fadeIn("<%= escape_javascript(render 'show') %>");
Questo funziona, ma preferirei se non ho bisogno di un separato _show
parziale. Purtroppo, questo non funziona:
show.html.erb
<div>Content!</div>
show.js.erb
$("#main").fadeIn("<%= escape_javascript(render 'show') %>");
come rotaie cercherà il show
parziali, non la vista reale.
C'è un modo per ottenere Rails per cercare il file di visualizzazione, piuttosto che parziale?
è possibile utilizzare il': f l'opzione 'ile', ad es. ': file => 'mostra''.L'helper render renderà implicitamente l'argomento stringa di render 'yourview'' in 'render: partial =>' yourview''. Il problema che si sta per affrontare, comunque, è che il contesto di ricerca nell'azione js risolverà "show" nella versione js, probabilmente risultando in un ciclo infinito o qualcosa del genere. – numbers1311407
Per fortuna, non loop. Almeno non ancora. Per ora ricevo un errore 'template mancante'. Sembra che non possa nemmeno trovarsi. – nullnullnull
Il rendering di una vista non parziale all'interno di un'altra vista non è esattamente il Rails Way ™. La tua soluzione attuale è probabilmente migliore. Rinominalo '_body' se ti senti strano riguardo al nome. La cosa comune che vedrai in questo scenario è 'render (@resource)', che si trasforma nel percorso parziale, ad es. 'Risorse/_resource'. – numbers1311407