使用Bootstrap或Foundation在Rails 4.1下的Flash消息颜色错误
以下代码使用Bootstrap 3.0显示Rails Flash消息:
<div class="alert alert-"> "flash_#{name}" %>
以下代码使用Bootstrap 3.0显示Rails Flash消息:
<div class="alert alert-"> "flash_#{name}" %>
代码来自文章Bootstrap和Rails 。
Foundation和Rails一文中的类似代码可以与Foundation一起使用:
<div data-alert class="alert-box round "> ×
对于Bootstrap或Foundation,当我将我的应用程序从Rails 4.0升级到Rails 4.1时,所有闪存消息都显示为红色,甚至是“通知”消息,这些消息应显示为绿色。
Rails 4.1中有什么改变来打破这段代码?
找到我自己的答案……
我已经修改了我的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:
对于Foundation,代码应更改为:
我尝试了这个答案,但如果不是’通知’那就标记一切都是危险的。 我最后制作了一个帮助类来保持我的其他flash消息不变,只改变那些返回旧的boostrap’notice’和’alert’类的设计。
<% flash.each do |name, msg| %> <% if msg.is_a?(String) %> <%= content_tag :div, msg, :id => "flash_#{name}" %> <% end %> <% end %>
和辅助方法
def flash_class_name(name) case name when 'notice' then 'success' when 'alert' then 'danger' else name end end