Rails parziali locali che non persistono quando inviati a un altro parziale come proprio locale

StackOverflow https://stackoverflow.com/questions/1240321

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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top