显示Flash消息的最佳实践方法

时间:2012-02-22 07:35:47

标签: ruby-on-rails ruby-on-rails-3

我想知道显示Flash消息的最佳做法是什么。我见过的两种主要方式是使用类似这种脚手架生成的代码

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

或在您的应用程序标题中放置这样的代码。

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

在我看来,第一种方法增加了灵活性,而后者提高了代码可读性并消除了冗余。大多数rails开发人员更喜欢哪种方法?作为一个侧面问题,脚手架如何实施通知?它只是一个访问Flash哈希的助手吗?当你可以直接使用flash哈希时,为什么要经历使用帮助器的麻烦?感谢

4 个答案:

答案 0 :(得分:63)

我这样做:

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

答案 1 :(得分:34)

调用部分会让您的application.html.erb更加清洁..

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

..并在部分做@ zolter提到的事情:

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

答案 2 :(得分:2)

为什么不将第二个方法放在辅助函数上,这样就不会影响布局的代码可读性?

答案 3 :(得分:1)

<% 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 %>