2009-08-06 13 views
10

me hacen un parcial de este modo:Rails locales parciales no persistente cuando se envían a otro parcial como su propio local de

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

Así interior de _some_partial.html.erb me hacen dos parciales más, así:

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

La variable local foo se procesa bien en some_partial.html.erb e incluso en another_partial_again.html.erb. Sin embargo, la variable foo es inaccesible en another_partial.html.erb aunque lo pasé explícitamente en la llamada de renderizado.

¿Qué está pasando aquí?

Gracias por la ayuda.

+0

¿Qué quiere decir con "inaccesible"? ¿Lanza una 'variable o método local indefinido' o es' nil'? ¿Puedes mostrar el código que usa 'foo' en estos sub-parciales? – hsribei

+0

arroja la variable local indefinida – user94154

+0

el código era simple: <%= foo %> – user94154

Respuesta

3

Resuelto. Resulta que también estaba representando el mismo parcial desde el controlador sin enviar las variables locales adecuadas. ¡¡¡Gracias de todos modos!!!

+1

En realidad, tuve el mismo problema, y ​​mi solución fue exactamente la misma: lo descubrí cuando vi su error: P –

+0

ugh yo también! decir ah. He cambiado mi haml de: "- si myvar" a "- si está definido? (Myvar) && myvar" – Chris

+0

mismo aquí, estaba pasando el parcial en AJAX, se olvidó de cambiar el símbolo – yoshyosh

41

Tuve el error undefined local variable or method que también surgió cuando estaba representando un parcial con :locals definido.

Sin embargo, tenía un problema diferente que causaba mi problema, así que pensé en compartir mi solución en caso de que ayudara a alguien más. (Esta página fue el primer resultado cuando busqué en Google este error después de todo)

Básicamente solo asegúrese de utilizar :partial => 'path/to/partial' en su llamada al render.

I.e.

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

no les gusta que estaba haciendo:

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

fácil para un novato rieles/rubí como yo a perder.

+0

+1 Salvavidas, gracias! –

+6

+1 @ asgeo1 Es extraño que necesites ': partial' para que funcione, ¡pero esto sí funciona! – iwasrobbed

+0

¡guau! Gracias ... Acabo de enterarme de Ruby y estaba totalmente confundido con respecto a este error. Desearía poder modificar más puntos. – Nabheet

0

Me topé con esta vieja pregunta porque me enfrenté al mismo problema. Resultó que con rieles 4+ si no está utilizando colecciones o Diseño de la manera correcta es:

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

Como se documenta here.

Cuestiones relacionadas