Эта работа для меня:
# 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)
Я предпочитаю такой подход, потому что не роль представления заключается в том, чтобы проверить, пусто ли ваше флэш-сообщение. Если у вас есть флэш-сообщение, распечатайте его! Если вы не хотите, не создавайте флеш-сообщения; -)