En utilisant Devise, je voudrais savoir s’il existe un moyen de supprimer un message flash particulier? (Enregistré avec succès).
Les autres messages de la vue me préoccupent, c’est donc uniquement pour les utilisateurs connectés et déconnectés. Dois-je écraser le contrôleur ou existe-t-il un autre moyen?
Je vous remercie!
Vous venez de définir une chaîne vide dans votre fichier local. Dans ce cas, vous ne pouvez rien voir.
D'accord!
Comme Shingara l'a dit, je définis une chaîne vide dans devise.en.yml
sessions:
signed_in: ''
et je change aussi un peu la ligne suivante (fournie par nifty-generators):
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash" if msg.length > 0 %>
<% end %>
De cette façon, mon css n'apparaît pas.
Chaîne vide dans le fichier de paramètres régionaux (comme suggéré ci-dessus), mais ajoutez également l'extrait de code CSS suivant à masquer (au lieu de vous amuser avec vos vues Flash)
.flash.alert:empty {
display: none;
}
Un autre moyen flexible consiste à supprimer la notification après l'action:
class SessionsController < Devise::SessionsController
after_action :remove_notice, only: :destroy
private
def remove_notice
flash[:notice] = nil
end
end
Avec cette solution, vous pouvez ajouter des conditions pour supprimer ou non la notification.
Une autre méthode consiste à remplacer le contrôleur Devise par le code suivant dans l'action de création, ce qui supprime le message flash:
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
ceci a été répondu à cette autre SO question. Pour un article de blog sur la façon de remplacer le contrôleur Devise, voir mon article de blog
De mon point de vue, je ne vois pas l'intérêt de vider une traduction de chaîne, car vous pouvez facilement modifier le fonctionnement du contrôleur. Je suppose que cette méthode est beaucoup plus correcte et satisfaisante.
Une meilleure réponse pourrait être de remplacer la méthode destroy dans sessionController.
Crée simplement un fichier placé dans: app/controllers/sessions_controller.rb
Comme vous pouvez le voir, nous commentons la ligne créant le message flash.
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
Je pense que cet appareil comprend maintenant que si vous modifiez le message d'erreur dans config/locals/devise.en.yml
en une chaîne vide, il l'ignorera automatiquement. Au moins c'est ce qui a fonctionné avec moi.
Vous pouvez le faire, veuillez changer le type de condition et le type de flash en conséquence.
flash.delete (: alert) if flash [: alert] == "Vous devez vous connecter ou vous inscrire pour continuer." @drivers = params [: mot clé] .blank? ? []: Driver.find (params [: mot-clé])
Vous pouvez le faire avant le filtre.