Рельсы 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, вы можете найти здесь

Другие вопросы по тегам