web-dev-qa-db-ja.com

Rails devise flashメッセージを無効にする

すべてのDevise gemフラッシュメッセージ(「正常にサインインした」、「ログアウトした」)を無効にするにはどうすればよいですか?ありがとう。

46
Marat_Galiev

おそらくこれを行う最も簡単な方法は

  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 %>
69
Michelle Tilley

私にとってより適切な答えは、このような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メソッドが安全にオーバーライドされます。

34
acrogenesis

is_flashing_format?をオーバーライドすることにより、特定のコントローラーでそれらを無効にすることができました。

def is_flashing_format?
  false
end

Devise 3.5.6を使用しています

5
Manuel Pedrera

私にとってこの作品:

_# 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)以降、メソッド破棄が存在します)

フラッシュメッセージが空白であるかどうかを確認するのはビューの役割ではないため、このアプローチを好みます。フラッシュメッセージがある場合は、印刷してください。必要ない場合は、フラッシュメッセージを作成しないでください;-)

3
djothefou

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' }

1
zhisme