Неправильный цвет для флэш-сообщений под Rails 4.1 с Bootstrap или Foundation
следующий код отображает сообщения Rails flash с помощью Bootstrap 3.0:
<%# 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">×</button>
<%= content_tag :div, msg, :id => "flash_#{name}" %>
</div>
<% end %>
<% end %>
код из статьи Bootstrap и рельсы.
аналогичный код из статьи фундамент и рельсы смогите быть использовано с учредительством:
<%# 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">×</a>
</div>
<% end %>
<% end %>
для Bootstrap или Foundation, когда я обновляю свое приложение с Rails 4.0 до Rails 4.1, все флэш-сообщения отображаются красным цветом, даже сообщения "уведомления", которые должны отображаться в зеленый.
что изменилось в Rails 4.1, чтобы взломать этот код?
2 ответов
нашел свой собственный ответ...
Я пересмотрел свой рельсы и Bootstrap учебник и обновил рельсы-bootstrap пример приложения соответственно.
хэш флэш-сообщения Rails содержит ключ ("имя") и значение ("сообщение").
под Rails 4.0 клавиша является символом.
под Rails 4.1 ключ представляет собой строку.
стиль flash-сообщений для отображения с помощью Bootstrap или Foundation требует разбора ключ, чтобы определить, является ли это предупреждение или уведомление.
в Rails 4.1 имена являются строками и не соответствуют приведенному выше коду, вместо этого стилизуются красным цветом с классом alert-danger.
чтобы исправить это, код для отображения флэш-сообщений с Bootstrap должен измениться для размещения как Rails 4.0, так и Rails 4.1:
<div class="alert alert-<%= name.to_s == 'notice' ? 'success' : 'danger' %>">
для Foundation код должен измениться следующим образом:
<div data-alert class="alert-box round <%= name.to_s == 'notice' ? 'success' : 'alert' %>">
я попробовал этот ответ, но он отмечал все как опасность, если это не было "уведомление". Я закончил тем, что сделал вспомогательный класс, чтобы сохранить мои другие флеш-сообщения неизменными и только изменить те, которые возвращали старые классы boostrap "notice" и "alert".
<div class="container">
<% flash.each do |name, msg| %>
<% if msg.is_a?(String) %>
<div class="alert alert-<%= flash_class_name(name) %>" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span>
<span class="sr-only">Close</span>
</button>
<%= content_tag :div, msg, :id => "flash_#{name}" %>
</div>
<% end %>
<% end %>
</div>
и вспомогательный метод
def flash_class_name(name)
case name
when 'notice' then 'success'
when 'alert' then 'danger'
else name
end
end