すべてのDevise gemフラッシュメッセージ(「正常にサインインした」、「ログアウトした」)を無効にするにはどうすればよいですか?ありがとう。
おそらくこれを行う最も簡単な方法は
あなたの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 %>
私にとってより適切な答えは、このようなDevise Session Controllerをオーバーライドすることでした
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メソッドが安全にオーバーライドされます。
is_flashing_format?
をオーバーライドすることにより、特定のコントローラーでそれらを無効にすることができました。
def is_flashing_format?
false
end
Devise 3.5.6を使用しています
私にとってこの作品:
_# 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
を使用できます。この例では、1つの工夫モデルしかありません。
私はflash.discard(:notice)
を使用していますが、_flash.discard
_を使用して他のタイプを同時に削除できます。 (Rails 3.0)以降、メソッド破棄が存在します)
フラッシュメッセージが空白であるかどうかを確認するのはビューの役割ではないため、このアプローチを好みます。フラッシュメッセージがある場合は、印刷してください。必要ない場合は、フラッシュメッセージを作成しないでください;-)
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' }