Deviseを使用して、特定のフラッシュメッセージを削除する方法があるかどうか知りたいですか? (正常にサインイン)。
ビュー内の他のメッセージが気になるので、サインインしたメッセージとサインアウトしたメッセージだけです。コントローラを上書きする必要がありましたか、それとも別の方法がありますか?
ありがとうございました!
ローカルファイルの空の文字列に定義するだけです。この場合、何も表示されません。
OK!
Shingaraが言ったように、私はdevise.en.ymlで空の文字列を定義します
sessions:
signed_in: ''
また、次の行を少し変更します(nifty-generatorsによって提供されます)。
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash" if msg.length > 0 %>
<% end %>
そのように、私のcssは表示されません。
ロケールファイルの文字列を空にします(上記で提案したように)が、非表示にする次のCSSスニペットも追加します(フラッシュビューでモンキーする代わりに)
.flash.alert:empty {
display: none;
}
これを行うもう1つの柔軟な方法は、アクションの後に通知の設定を解除することです。
class SessionsController < Devise::SessionsController
after_action :remove_notice, only: :destroy
private
def remove_notice
flash[:notice] = nil
end
end
このソリューションを使用すると、通知を削除するかどうかに条件を追加できます。
もう1つの方法は、Deviseコントローラーをオーバーライドする場合、作成アクションで次のコードを入力します。これにより、フラッシュメッセージが削除されます。
class MyDevise::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
これはこの他で答えられましたSO質問。 Deviseコントローラをオーバーライドする方法に関するブログ投稿については、 私のブログ投稿 を参照してください
私の観点からは、コントローラーの動作を簡単に変更できるので、文字列変換を空にすることの意味はわかりません。この方法の方がはるかに正確で満足のいくものだと思います。
より良い答えは、sessionControllerのdestroyメソッドをオーバーライドすることです。
App/controllers /sessions_controller.rbに配置されたファイルを作成するだけです
ご覧のとおり、フラッシュメッセージを作成する行にコメントを付けています。
class SessionsController < Devise::SessionsController
# DELETE /resource/sign_out
def destroy
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
#set_flash_message :notice, :signed_out if signed_out && is_flashing_format?
yield if block_given?
respond_to_on_destroy
end
end
config/locals/devise.en.yml
のエラーメッセージを空の文字列に変更すると、自動的に無視されることをdeviseが理解したと思います。少なくともそれが私と一緒に働いたものです。
これを行うことができます。それに応じて、条件タイプとフラッシュタイプを変更してください。
flash.delete(:alert)if flash [:alert] == "続行する前にサインインまたはサインアップする必要があります。" @drivers = params [:keyword] .blank? ? []:Driver.find(params [:keyword])
フィルター前にそれを行うことができます。