6
votes

Message flash ne s'affiche pas après la redirection ou le rendu

Utiliser des rails 4 et Ruby 2

avoir des problèmes d'affichage des messages Flash de mes contrôleurs. Ma méthode ressemble à ceci: p> xxx pré>

Comme vous pouvez le constater, j'ai ajouté une déclaration de puts imprimant l'avis de Flash pour prouver que l'avis de flash est généré après la redirection. . P>

Les journaux ressemblent à ceci après la création d'un rapport de salaire: p> xxx pré>

Après avoir montré à afficher les journaux de vue: P>

<% flash.each do |name, msg| %>
      <% if msg.is_a?(String) %>
        <div class="alert alert-<%= name == :notice ? "success" : "error" %>">
          <a class="close" data-dismiss="alert">&#215;</a>
          <%= content_tag :div, msg, :id => "flash_#{name}" %>
        </div>
      <% end %>
    <% end %>


6 commentaires

Juste pour clarifier, la commande où vous avez placé le message flash n'a pas d'importance tant que vous n'appelez pas explicitement retour avant de définir le message Flash. Êtes-vous sûr de ne pas être redirigé deux fois après avoir créé le rapport de salaire?


un seul redirect. Voir les journaux ci-dessus.


Oui je vois ça. Mais que se passe-t-il lorsque vous arrivez à l'action du spectacle? Ce n'est pas inclus dans la question.


J'ai ajouté les journaux pour après mon arrivée à afficher la vue.


Désolé, j'ai manqué d'idées. Essayez d'utiliser le débogueur dans l'action pour voir si le flash est écoulé.


Avez-vous résolu le problème, Jasson?


5 Réponses :


0
votes

Essayez de définir le message Flash dans une clause de redirection: xxx


1 commentaires

qui a donné le même résultat malheureusement



5
votes

Vous définissez votre Flash [: Avis] code> après redirection. Essayez de changer l'ordre de ces appels I.E. Définissez d'abord le message Flash, puis rediriger la seconde:

def create
    @salary_report = SalaryReport.create(salary_report_params)
    if @salary_report.save  
      flash[:notice] = "Lönerapporten sparades korrekt!"
      puts "salary report saved #{flash[:notice]}"
      redirect_to @salary_report
    else
      render :new, notice: "Något gick fel när lönerapporten skulle sparas!"      
    end
  end


5 commentaires

Qui a donné le même résultat malheureusement


@Jasoncarty, où avez-vous le <% flash.each fut | nom, msg | %> ... <% fin au%> block placé? Est-ce dans la mise en page ou est-ce dans votre Afficher ?


Je l'ai essayé dans la vue Afficher et Application.html.erb


@Jasoncarty, eh bien, dans ce cas, avez-vous vérifié la source de la page (voir la source du navigateur) et vérifiées si ces alertes divs sont générées. Très improbable mais il est possible que ces divs soient cachés via CSS, la deuxième possibilité est qu'il y a un bogue dans les rails 4 avec des notifications de flash.


J'ai vérifié la source de la page et rien. Que fait-il c'est un rails 4 bug?



0
votes

Essayez Utiliser Flash.ekeep.

Tout ce que vous placez dans le flash sera exposé à l'action très suivante, puis éliminée. P>

Dans ce cas, passe flash en 2 actions, un autre contrôleur et une vue. P>

def create
  @salary_report = SalaryReport.create(salary_report_params)
  if @salary_report.save  
    flash.keep[:notice] = "Lönerapporten sparades korrekt!"
    puts "salary report saved #{flash[:notice]}"
    redirect_to @salary_report
  else
    render :new, notice: "Något gick fel när lönerapporten skulle sparas!"      
  end
end


1 commentaires

Peut-être que c'est parce que vous l'utilisez dans votre méthode de vente, essayez flash.eigne [: avis] = Avis = "LönerApporten Sparades Korrekt!" TU met "Rapport de salaire enregistré # {Avis}"



0
votes

Tout d'abord, au lieu de définir le message Flash séparément, mettez-le en ligne avec votre redirection, tout comme vous faites avec votre ligne de rendu ci-dessous. Ceci est plus d'un changement de style que n'importe quoi de manière majeure fonctionnelle: xxx

comme pour la raison pour laquelle il ne s'affiche pas, il s'agit probablement d'un problème avec votre code de vue de message Flash. En effet, comme vous l'avez testé, le hachage flash est défini correctement, il n'est tout simplement pas affiché.

Essayez de remplacer temporairement votre code de message Flash avec la version plus simple suivante. Assurez-vous que c'est dans votre application.html.erb près du sommet, mais c'est encore une fois de style: xxx


0 commentaires

0
votes

J'ai assez du même problème à cause de Devise Gem et j'ai trouvé une solution avec les cookies.

Vous devez définir un cookie avec une valeur avant de rediriger, puis le contrôleur teste s'il y a un cookie. Si oui, il teste quelle est sa valeur et affiche le message Flash.

Jetez un coup d'œil ici pour une explication complète: Flash [: Remarque] Ne fonctionne pas avec l'après_sign_out_path_for - (Devise)

J'espère que cela peut vous aider.


0 commentaires