Rails отключить разработку флеш сообщений - PullRequest
45 голосов
/ 23 апреля 2011

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

Ответы [ 6 ]

69 голосов
/ 23 апреля 2011

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

  1. Определить каждое сообщение как пустую строку
  2. Проверьте длину строки, прежде чем показывать флэш-сообщение.

В вашем файле 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 %>
33 голосов
/ 15 сентября 2014

Лучшим ответом для меня было переопределение контроллера сессий Devise следующим образом

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

Это безопасно переопределяет метод создания и уничтожения, удаляющий флэш-сообщение

5 голосов
/ 17 июля 2016

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

def is_flashing_format?
  false
end

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

3 голосов
/ 10 апреля 2018

Эта работа для меня:

# app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
  after_action :remove_notice, only: [:destroy, :create]

  private

  def remove_notice
    flash.discard(:notice) #http://api.rubyonrails.org/v5.1/classes/ActionDispatch/Flash/FlashHash.html#method-i-discard
  end
end

# add this line in 'config/routes.rb'
devise_for :users, :controllers => { sessions: 'users/sessions' }

Я использую Users::SessionsController, но вы можете использовать SessionsController, у меня есть только одна модель устройства в этом примере.

Я использую flash.discard(:notice), но вы можете использовать flash.discard для одновременного удаления других типов. (метод discard существует с версии 3.0)

Я предпочитаю такой подход, потому что не роль представления заключается в том, чтобы проверить, пусто ли ваше флэш-сообщение. Если у вас есть флэш-сообщение, распечатайте его! Если вы не хотите, не создавайте флеш-сообщения; -)

1 голос
/ 08 декабря 2017

Для 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' }

0 голосов
/ 23 апреля 2011

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

rails generate devise:views

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...