使用Bootstrap或Foundation在Rails 4.1下的Flash消息的颜色错误

Dan*_*hoe 17 ruby-on-rails twitter-bootstrap zurb-foundation railsapps ruby-on-rails-4.1

以下代码使用Bootstrap 3.0显示Rails Flash消息:

<%# 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 %>
Run Code Online (Sandbox Code Playgroud)

代码来自文章Bootstrap和Rails.

Foundation和Rails一文中的类似代码可以与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 %>
Run Code Online (Sandbox Code Playgroud)

对于Bootstrap或Foundation,当我将我的应用程序从Rails 4.0升级到Rails 4.1时,所有闪存消息都显示为红色,甚至是"通知"消息,这些消息应显示为绿色.

Rails 4.1中有什么改变来打破这段代码?

Dan*_*hoe 33

找到了我自己的答案......

我修改了我的Rails和Bootstrap教程并相应地更新了rails-bootstrap示例应用程序.

Rails flash消息散列包含密钥("名称")和值("消息").

在Rails 4.0下,键是一个符号.

在Rails 4.1下,键是一个String.

使用Bootstrap或Foundation显示Flash消息的样式需要解析密钥以确定它是警报还是通知.

在Rails 4.1下,名称是字符串,并且与上面的代码不匹配,而是使用alert-danger类进行红色样式设置.

要修复它,使用Bootstrap显示flash消息的代码应该更改以适应Rails 4.0和Rails 4.1:

<div class="alert alert-<%= name.to_s == 'notice' ? 'success' : 'danger' %>">
Run Code Online (Sandbox Code Playgroud)

对于Foundation,代码应更改为:

<div data-alert class="alert-box round <%= name.to_s == 'notice' ? 'success' : 'alert' %>">
Run Code Online (Sandbox Code Playgroud)