ruby-on-rails twitter-bootstrap zurb-foundation railsapps ruby-on-rails-4.1

ruby on rails - Color incorrecto para mensajes flash en Rails 4.1 con Bootstrap o Foundation



ruby-on-rails twitter-bootstrap (2)

El siguiente código muestra los mensajes flash de Rails usando Bootstrap 3.0:

<%# Rails flash messages styled for Twitter Bootstrap 3.0 %> <% flash.each do |name, msg| %> <% if msg.is_a?(String) %> <div class="alert alert-<%= name == :notice ? "success" : "danger" %>"> <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> <%= content_tag :div, msg, :id => "flash_#{name}" %> </div> <% end %> <% end %>

El código es del artículo Bootstrap and Rails .

Se puede usar un código similar del artículo Foundation y Rails con Foundation:

<%# Rails flash messages styled for Zurb Foundation 5.0 %> <% flash.each do |name, msg| %> <% if msg.is_a?(String) %> <div data-alert class="alert-box round <%= name == :notice ? "success" : "alert" %>"> <%= content_tag :div, msg %> <a href="#" class="close">&times;</a> </div> <% end %> <% end %>

Ya sea para Bootstrap o Foundation, cuando actualizo mi aplicación de Rails 4.0 a Rails 4.1, todos los mensajes flash aparecen en rojo, incluso los mensajes de "aviso" que deberían aparecer en verde.

¿Qué ha cambiado en Rails 4.1 para romper este código?


Encontré mi propia respuesta ...

Revisé mi tutorial de Rails y Bootstrap y actualicé la aplicación de ejemplo rails-bootstrap consecuencia.

El hash del mensaje flash de Rails contiene una clave (un "nombre") y un valor (el "mensaje").

Bajo Rails 4.0, la clave es un símbolo.

Debajo de los rieles 4.1, la clave es una cadena.

Los mensajes flash de estilo para mostrar con Bootstrap o Foundation requieren el análisis de la clave para determinar si es una alerta o un aviso.

Debajo de Rails 4.1, los nombres son cadenas y el código de arriba no los hace coincidir, en vez de eso, tienen un estilo en rojo con la clase de alerta de peligro.

Para solucionarlo, el código para mostrar mensajes flash con Bootstrap debería cambiar para adaptarse a Rails 4.0 y Rails 4.1:

<div class="alert alert-<%= name.to_s == ''notice'' ? ''success'' : ''danger'' %>">

Para la Fundación, el código debe cambiar a esto:

<div data-alert class="alert-box round <%= name.to_s == ''notice'' ? ''success'' : ''alert'' %>">


Intenté esta respuesta, pero estaba marcando todo como un peligro si no era "aviso". Terminé haciendo una clase de ayuda para mantener mis otros mensajes flash sin cambios y solo alterar los dispositivos que estaban devolviendo las antiguas clases de ''aviso'' y ''alerta''.

<div class="container"> <% flash.each do |name, msg| %> <% if msg.is_a?(String) %> <div class="alert alert-<%= flash_class_name(name) %>" role="alert"> <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span> <span class="sr-only">Close</span> </button> <%= content_tag :div, msg, :id => "flash_#{name}" %> </div> <% end %> <% end %> </div>

y un método de ayuda

def flash_class_name(name) case name when ''notice'' then ''success'' when ''alert'' then ''danger'' else name end end