Tengo un parcial, _flash.html.haml
mensajes flash en Parciales (carriles 3)
- flash.each do |type, value|
.flash{ :class => type.to_s }
= value
que estoy representación de una vista usando
=render :partial => "flash"
Qué se queja de que el hash flash es nil/indefinido Sin embargo, cuando hago esto:
=render :partial => "flash", :locals => {:flash => flash}
Funciona.
¿Por qué el parcial no tiene acceso al mensaje flash?
Pero 'flash' no es una variable de instancia en la vista principal, es un método en' ActionView :: Base', que es esencialmente lo mismo que ser un método auxiliar. Entonces, ¿por qué no 'flash' en la llamada parcial el mismo método? – John
Es porque el sombreado del espacio de nombres. El parcial se denomina flash, por lo que reserva el nombre de la variable flash dentro del parcial para delegar en flash ivar en la plantilla principal, independientemente de si el flash existe o no. Como respondió @tothemario, nombrarlo de otra forma detendrá el sombreado del espacio de nombres. – Cluster
@Cluster, creo que me has dejado sin palabras. A veces me pregunto si Rails "majic" no es demasiado mágico por su propio bien. – guiniveretoo