2012-04-03 20 views
7

Voglio passare una variabile locale che contiene l'origine di venire su una pagina specifica, questa variabile contiene solo un simbolo con il valore.Render @object e locals vs render: partial

Quando uso questo codice funziona perfettamente, la variabile origine è accessibile nel parziale:

render :partial => "products", :collection => @products, :locals => {:origin => :gallery} 

Ma quando uso questo codice, l'origine non è impostato e non accessibile nel parziale:

render @products, :locals => {:origin => :gallery} 

Qual è la differenza qui? La seconda riga di codice non rende il partial come la prima riga?

+0

non dovrebbe essere ': i locali => {: origine => : gallery} '? – Nick

+0

@Ancora questo era un errore di battitura, nella mia applicazione uso: locals => {: origin =>: gallery}, quindi non era questo il problema. Ma buona cattura! :) – SteenhouwerD

risposta

8
<%= render @products %> 

È effettivamente la sintassi abbreviata per il rendering di un parziale. Ma con la sintassi abbreviata, Rails ignorerà la variabile ": locals". C'è altro su questo nel Rails Guides.

Quindi, se si desidera passare opzioni extra al rendering, è necessario specificare ": partial => ...". Se vuoi sapere perché questo accade, puoi dare un'occhiata al Rails source.

+0

puoi passare una variabile locale alla fine di '@ prodotti' funziona per me. –

1

C'è una buona spiegazione qui: Rails: confused about syntax for passing locals to partials

La versione breve è che si può semplicemente omettere :locals nel secondo esempio:

render @products, :origin => :gallery 
+0

Decisamente non funziona per me (Rails 3.2.13). Il link all'altra domanda è utile. Ma penso che il tuo esempio sia sbagliato perché stai tentando di utilizzare la scorciatoia della collezione, che sfortunatamente non ti lascia passare la gente del posto. Probabilmente stai pensando di "renderizzare" il prodotto ",: origin =>: gallery' – Arcolye