Рельсы 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?
РЕДАКТИРОВАТЬ: мой Майкл Хартл вдохновил 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?
3 ответа
В 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
хэш в этом методе.
Добавьте это к
приложение / контроллеры /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>
Если вы не хотите связываться с вашим 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;
}
Пошаговое руководство, как подходить к флеш-сообщениям с помощью devise и bootstrap, вы можете найти здесь