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

Rails Отключить создание флеш-сообщений

Как я могу отключить все флеш-сообщения Devise gem ( "успешно подписан", "вы вышли из системы" )? Спасибо.

4b9b3361

Ответ 1

Вероятно, самый простой способ сделать это -

  • Определите каждое сообщение как пустую строку
  • Проверьте длину строки перед отображением флэш-сообщения.

В вашем файле devise.en.yml укажите каждое сообщение как пустое:

en:
  errors:
    messages:
      not_found: ''
      already_confirmed: ''
      not_locked: ''

и т.д.. Затем, в вашем макете, проверьте, чтобы строки пустого флэш-памяти были перед их выпуском.

<% flash.each do |key, value| %>
  <%= content_tag :div, value, :class => "flash #{key}" unless value.blank? %>
<% end %>

Ответ 2

Ответ, который лучше всего подходит для меня, заключался в том, чтобы переопределить контроллер сеанса разработки, как этот

class SessionsController < Devise::SessionsController

  # POST /resource/sign_in
  def create
    super
    flash.delete(:notice)
  end

  # DELETE /resource/sign_out
  def destroy
    super
    flash.delete(:notice)
  end

end

Это безопасно отменяет метод create и destroy, удаляя флэш-сообщение

Ответ 3

Я смог отключить их в заданном контроллере, переопределив is_flashing_format?:

def is_flashing_format?
  false
end

Я использую Devise 3.5.6

Ответ 4

Для Rails 5.0.6 этот код будет работать.

app/controllers/sessions_controller.rb

class SessionsController < Devise::SessionsController

  def new
    flash.clear
    super
  end
end

Не забывайте маршруты.

config/routes.rb

devise_for :users, controllers: { sessions: 'sessions' }

Ответ 5

Devise включает удобный генератор для копирования всех видов в ваш проект:

rails generate devise:views

Таким образом вы можете самостоятельно отредактировать представления и решить, что вы хотите сохранить или выбросить (флэш-сообщения).