Рельсы 4 - уведомление о вспышке
Я все еще работаю над своим демо-сайтом rails 4, и я вижу странную вещь. В контроллере он имеет такую строку:
format.html { redirect_to @widget, notice: 'Widget was successfully created.' }
Это отображает флэш-сообщение на перенаправленной странице, что ожидается. Тем не менее, класс css, прикрепленный к сообщению div, alert alert-notice
, а не действительный класс предупреждения Bootstrap, например alert-info
.
Где установлен класс для этой вспышки и как его настроить?
Кроме того, если я удаляю запись через ajax, есть ли способ получить доступ к основному флэш-контейнеру, чтобы отобразить сообщение через js, или мне нужно показать/скрыть свой собственный флеш файл div только для запросов ajax?
EDIT: мой Майкл Хартл вдохновил layouts/application.html.erb
:
<div class="container">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
</div>
Спасибо!
ИЗМЕНИТЬ 2:
Возможно, я не был достаточно ясен в своем первоначальном вопросе. Я точно понимаю, как класс устанавливается в объекте flash в этом случае. Мне интересно узнать, как использовать и настроить notice:
в блоке format.html
. Кажется, должен быть способ пройти класс через это уведомление? Или это не основной способ Rails делать вещи?
Ответы
Ответ 1
В application.html.erb
вы будете отображать сообщения flash
.
Обновите этот код ниже
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, class: "alert alert-info" %>
<% end %>
Вы можете добавить классы, которые вы хотите применить к флэш-сообщению в опции class
.
ИЗМЕНИТЬ
Класс устанавливается как alert alert-notice
из-за alert alert-<%= key %>
в вашем коде.
Когда вы вызываете redirect_to @widget, notice: 'Widget was successfully created.
В flash
хеш добавляется флэш-сообщение с ключом как notice
и значение Widget was successfully created.
, т.е.
flash[:notice] = "Widget was successfully created."
РЕДАКТИРОВАТЬ № 2
format.html { redirect_to @widget, notice: 'Widget was successfully created.' }
notice: 'Widget was successfully created.'
- это аргумент, переданный методу redirect_to
. Он добавляется к flash
хешу в этом методе.
Ответ 2
Добавьте это в
приложение/контроллеры/application_controller.rb
class ApplicationController
add_flash_types :success, :warning, :danger, :info
end
а затем вы можете сделать это в своих контроллерах
format.html { redirect_to @widget, success: 'Widget was successfully created.' }
если вы сделали это в своих макетах
<div class="container">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
</div>
Ответ 3
Если вы не хотите испортить свой ApplicationController
как указано @Sachin Mour, вы можете просто добавить несколько дополнительных CSS-кладок, соответственно:
в app/assets/stylesheets/custom.scss
:
/*flash*/
.alert-error {
background-color: #f2dede;
border-color: #eed3d7;
color: #b94a48;
text-align: left;
}
.alert-alert {
background-color: #f2dede;
border-color: #eed3d7;
color: #b94a48;
text-align: left;
}
.alert-success {
background-color: #dff0d8;
border-color: #d6e9c6;
color: #468847;
text-align: left;
}
.alert-notice {
background-color: #dff0d8;
border-color: #d6e9c6;
color: #468847;
text-align: left;
}
Пошаговое руководство, как подойти к флеш-сообщениям с помощью утилит и бутстрапа, вы можете найти здесь