2009-08-06 8 views
10

rendo un parziale in questo modo:Rails locali parziali non persistendo quando vengono inviati ad un altro parziale come proprio locale

<%= render :partial => 'widgets/some_partial, :locals => {:foo => 'bar'} %> 

Così all'interno di _some_partial.html.erb rendo altri due parziali in questo modo:

<% #foo.nil? #=> false %> 
<%= render :partial => 'widgets/another_partial', :locals => {:foo => foo} %> 
`<%= render :partial => 'widgets/another_partial_again', :locals => {:foo => foo} %>` 

La variabile locale foo viene visualizzata correttamente in some_partial.html.erb e anche in another_partial_again.html.erb. Tuttavia, la variabile foo è inaccessibile in another_partial.html.erb anche se l'ho passata esplicitamente nella chiamata di rendering.

Cosa sta succedendo qui?

Grazie per l'aiuto.

+0

Cosa intendi con "inaccessibile"? Getta una 'variabile locale o un metodo' o è 'nil'? Puoi mostrare il codice che usa 'pippo' su questi sub-parziali? – hsribei

+0

getta la variabile locale non definita – user94154

+0

il codice era semplice: <%= foo %> – user94154

risposta

3

Risolto. Risulta che stavo anche rendendo lo stesso parziale dal controller senza inviare le variabili locali appropriate. Grazie comunque!!!

+1

In realtà avevo lo stesso problema e la mia soluzione era esattamente la stessa: l'ho capito quando ho visto il tuo errore: P –

+0

ugh me too! ha. Ho cambiato il mio ham da: "- se myvar" a "- se definito? (Myvar) && myvar" – Chris

+0

stesso qui, stava passando il partial in AJAX, dimenticato di cambiare il simbolo – yoshyosh

41

Ho avuto l'errore undefined local variable or method anche per me quando eseguivo il rendering parziale con :locals definito.

Tuttavia, ho riscontrato un problema diverso a causa del mio problema, quindi ho pensato di condividere la mia soluzione nel caso in cui fosse di aiuto a chiunque altro. (Questa pagina è stata la prima volta quando ho cercato su Google questo errore)

In pratica, assicurati di utilizzare :partial => 'path/to/partial' nella tua chiamata a render.

I.e.

<%= render :partial => 'widgets/some_partial', :locals => {:foo => 'bar'} %> 

non come stavo facendo:

<%= render 'widgets/some_partial', :locals => {:foo => 'bar'} %> 

facile per un principiante rotaie/ruby ​​come me di perdere.

+0

+1 Life saver, grazie !! –

+6

+1 @ asgeo1 Strano che tu abbia bisogno di ': partial' per farlo funzionare, ma funziona davvero! – iwasrobbed

+0

Eeeek !!! Grazie ... Sto solo imparando Ruby e sono stato totalmente confuso riguardo a questo errore. Vorrei poter modificare più punti. – Nabheet

0

Bumped in questa domanda molto vecchia perché ho affrontato lo stesso problema. è scoperto che con Rails 4+ se non si utilizza collezioni o Layout il modo corretto è:

# Instead of <%= render partial: "account", locals: { account: @buyer } %> 
<%= render "account", account: @buyer %> 

Come documentato here.