2012-02-22 19 views
24

Me pregunto cuál es la mejor práctica para mostrar mensajes flash. Las dos formas principales que he visto están usando algo como esto andamio generan códigoMétodo de mejores prácticas para mostrar mensajes flash

<p id="notice"><%= notice %></p> 

o código colocando así en el encabezado de la aplicación.

<% if !flash.empty? %> 
    <div id="flash"> 
     <% flash.keys.each do |k| %> 
      <div class="<%= k %>"> 
       <%= flash[k] %> 
      </div> 
     <% end %> 
    </div> 
<% end %> 

Me parece que el primer método agrega más flexibilidad mientras que el segundo mejora la legibilidad del código y elimina la redundancia. ¿Hay algún método que prefiera la mayoría de los desarrolladores de rieles? Como una pregunta complementaria, ¿cómo implementa el andamio la notificación? ¿Es solo un ayudante que accede al hash flash? ¿Por qué pasar por la molestia de usar el ayudante cuando puede usar directamente el hash flash? Gracias

Respuesta

55

que estoy haciendo de esta manera:

<% flash.each do |key, value| %> 
    <%= content_tag :div, value, class: "flash #{key}" %> 
<% end %> 
+0

¿Ofrece esto beneficios específicos aparte de menos líneas de código? Gracias – Steve

+1

Sí, reduce el número de líneas de código y mejora la legibilidad del código. – zolter

+1

")" después de "flash # {key}" no es necesario, arroja el mensaje de error –

2

¿Por qué no poner el segundo método en una función auxiliar para que no afecte la legibilidad del código en los diseños?

+0

Solo he tenido que usarlo una vez en el encabezado de mi aplicación, pero si eso se ha vuelto más desordenado supongo que pondré en un ayudante separado. ¿Sabe cómo funciona el aviso de aviso, porque parece que el andamiaje ya lo hace por usted usando ese aviso de ayuda? Gracias – Steve

+0

Puede utilizar más de una vez en proyectos diferentes, es como todos los ayudantes de Rails que utiliza una vez por aplicación como csrf_mete_tags helper. – fjyaniez

30

Llamar a un parcial mantiene su application.html.erb aún más limpio ..

<%= render 'shared/flash_messages' if !flash.empty? %> 

.. y en el parcial a hacer algo parecido a lo que se ha mencionado @zolter:

<div id="flash_messages"> 
    <% flash.each do |key, value| %> 
    <%= content_tag(:div, value, :class => "flash #{key}") %> 
    <% end %> 
</div> 
+2

Pero puede poner todo en un parcial entonces. Como siempre lo entendí, principalmente solo quieres lanzar cosas en un parcial que se repiten en toda tu aplicación. Si hay grandes trozos de código, entonces sí también los pone en un parcial, pero ¿esto califica como eso? No sé y no tengo suficiente experiencia para hacer esa llamada, pero no veo el sentido de hacer una nueva parcialidad. Gracias – Steve

+3

[Una forma de usar parciales es tratarlos como el equivalente de subrutinas: como una forma de mover detalles de una vista para que pueda captar lo que está sucediendo más fácilmente.] (Http://guides.rubyonrails.org /layouts_and_rendering.html#using-partials-to-simplify-views) – user664833