Подтвердить что ты не робот

Рельсы 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 делать вещи?

4b9b3361

Ответ 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;
 }

Пошаговое руководство, как подойти к флеш-сообщениям с помощью утилит и бутстрапа, вы можете найти здесь