web-dev-qa-db-fra.com

Meilleure méthode d'affichage de messages flash

Je me demande quelle est la meilleure pratique pour afficher des messages flash. Les deux principaux moyens que j'ai vus utilisent quelque chose comme ce code généré par un échafaudage

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

ou en plaçant un code comme celui-ci dans l'en-tête de votre application.

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

Il me semble que la première méthode offre plus de flexibilité, tandis que la dernière améliore la lisibilité du code et élimine la redondance. Existe-t-il une méthode que la plupart des développeurs Rails préfèrent? En parallèle, comment un échafaudage met-il en œuvre un avis? Est-ce juste une aide qui accède au hash flash? Pourquoi passer par le problème d'utiliser l'aide lorsque vous pouvez utiliser directement le hash flash? Merci

28
Steve

Je le fais de cette façon:

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

Appeler un partiel garde votre application.html.erb encore plus propre ..

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

.. et dans le partiel faire quelque chose comme ce que @zolter a mentionné:

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

Pourquoi ne pas mettre la deuxième méthode sur une fonction d'assistance afin qu'elle n'affecte pas la lisibilité du code sur les mises en page?

2
fjyaniez
<% if flash[:notice] %>
  <div class="notification is-primary global-notification">
    <p class="notice"><%= notice %></p>
  </div>
<% end %>

<% if flash[:alert] %>
  <div class="notification is-danger global-notification">
    <p class="alert"><%= alert %></p>
  </div>
<% end %>
1
Ümit Öztürk