Rails parziali locali che non persistono quando inviati a un altro parziale come proprio locale
-
11-09-2019 - |
Domanda
Rendo un parziale in questo modo:
<%= render :partial => 'widgets/some_partial, :locals => {:foo => 'bar'} %>
Quindi all'interno _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 resa correttamente some_partial.html.erb
e anche dentro another_partial_again.html.erb
.Tuttavia, la variabile foo è inaccessibile in another_partial.html.erb
anche se l'ho passato esplicitamente nella chiamata di rendering.
Cosa sta succedendo qui?
Grazie per l'aiuto.
Soluzione 2
risolto. Venuto fuori che è stato anche il rendering del medesimo parziale dal controller senza inviare le variabili locali adeguati. Grazie comunque !!!
Altri suggerimenti
Ho avuto il undefined local variable or method
si è verificato un errore anche a me mentre stavo eseguendo il rendering parziale con :locals
definito.
Tuttavia, avevo un problema diverso che causava il mio problema, quindi ho pensato di condividere la mia soluzione nel caso in cui possa aiutare qualcun altro.(Dopo tutto, questa pagina è stata il primo risultato quando ho cercato su Google questo errore)
Fondamentalmente assicurati solo di usare :partial => 'path/to/partial'
nella tua chiamata a render
.
Cioè.
<%= render :partial => 'widgets/some_partial', :locals => {:foo => 'bar'} %>
NON come stavo facendo:
<%= render 'widgets/some_partial', :locals => {:foo => 'bar'} %>
È facile che un principiante dei rail/rubini come me non se ne accorga.
Urtato questa stessa vecchia domanda perché ho dovuto affrontare lo stesso problema. Venne fuori 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 qui .