8
votes

Les messages flash apparaissant deux fois dans des rails

Mes messages Flash apparaissent deux fois et ma recherche Web me dit que cela est dû à rendre et à rediriger l'affichage des messages. Je pense que je dois utiliser Flash.Now [] ou Flash [] quelque part pour trier cela, mais je ne peux pas travailler là où il doit aller

Guidelines_Controller.rb p>

def show
    @guideline = Guideline.find(params[:id])
    if @guideline.updated_by
     @updated = User.find(@guideline.updated_by).profile_name
   end

      if User.find(@guideline.user_id)
     @created = User.find(@guideline.user_id).profile_name
      end

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @guideline }

    end
  end


6 commentaires

Essayez de corriger que <% fin de%> appelez-les avant le div . Je ne vois aucun problème avec votre code de contrôleur. Je ne pense pas non plus que vous devez utiliser flash.discard


ont édité comme ci-dessus (c'est ce que vous vouliez dire?) Mais le même problème se produit.


Nan. Vous devez fermer la DIV d'abord avant la boucle. Essayez d'indenter votre code correctement afin qu'il correspond à des balises / code d'ouverture et de fermeture


désolé, je n'ai pas mis mon édition correctement - je l'ai édité (maintenant corrigé ci-dessus) mais toujours pas de joie


À quoi ressemble votre demande de votre guide? Je suppose que vous faites une demande HTML lorsque vous voyez ce problème?


Merci, j'ai ajouté l'action de spectacle ci-dessus ...


3 Réponses :


2
votes

Vous pouvez faire quelque chose comme ceci afin de sauvegarder certaines lignes de code et d'afficher les messages qu'une seule fois: xxx

à l'aide de flash.discard, vous affichez le message Flash pour éviter le rendu. deux fois


6 commentaires

Merci - j'ai ajouté que à ma disposition de l'application (au lieu de ce qui est ci-dessus). Maintenant, il affiche encore deux fois mais sans la ligne de bootstrap (qui était sur l'un d'entre eux seulement) ... Toutes les idées Pourquoi cela pourrait-il se produire?


Son ennuyeux que même jeter le message Flash, vous obtenez le flash en cours d'affichage deux fois. Et si vous mettez un <% = flash de débogage%> avant de montrer le flash, pour voir si vous avez dupliqué des messages Flash? Qui peut être le problème.


Juste avant le <% - si flash.any? %> d'avant le flash.Chaque, le <% = Débug @Flash%> affichera simplement le contenu du flash. Il serait préférable que vous puissiez utiliser un point d'arrêt, et dans ce cas, vous pouvez vérifier le contenu du flash par vous-même et ne pas avoir à le rendre à l'écran.


Il suffit de s'afficher --- ... et ensuite sous dit le "message de réussite" deux fois.


Si vous entrez dans le chat Stackoverflow, je pourrais peut-être vous aider: chat.stackoverflow.com/rooms/5676 / ruby-on-rails


Grâce à @RORRA qui a subi une douleur à la douleur, passa à mon code, nous avons trouvé un message Flash supplémentaire affichant sur la vue Afficher. Supprimé cela et tout fonctionnait bien.



1
votes

J'avais aussi le même problème et j'ai également été dû à un autre appel de <% = Render 'partagé / alertes'%> après mon chèque pour flash . J'ai aimé l'idée de @ Rorra de faire un flash_key . Mais ici dans l'année 2020, cela ne fonctionnait pas comme @TessAd a déclaré. Il montrerait le message, mais pas au format en bootstrap correctement.

J'ai pu changer de code pour travailler avec Bootstrap 4. Il est même renvoyé car il est censé. Les trois choses qui devaient changer étaient toutes traitant de la classe de la div pouvant afficher l'avis de Flash. xxx

alerte-message devient juste alerte et le flash_key doit avoir < code> alerte - avant de cela. xxx

La dernière chose est que je l'ai envoyé à la vue du contrôleur comme flash [: Avis] , qui n'est pas une alerte de bootstrap reconnue . Lorsque je l'ai changé en Flash [: AVERTISSEMENT] Il est apparu correctement.

Voici le code final qui a fonctionné pour moi. En le mettant ici au cas où quelqu'un en a besoin maintenant 7 ans après que la réponse initiale ait été donnée. xxx