2010-10-05 4 views
2

J'ai un flash_helper que j'ai téléchargé de façon incommode à partir de certains tutoriels Web, qui me reviennent maintenant à la tête. Du bon côté, je suis sûr que les nombreux codeurs talentueux trouveront cela facile. :)Rails 3 joue avec mon flash!

# application_helper 
def flash_helper 
[:notice, :warning, :message].map { |f| content_tag(:div, flash[f], :class => f) if flash[f] } 
end 

Ce code, combiné avec <% = flash_helper%> dans mon point de vue, est leader sur le code HTML suivant généré:

[&quot;&lt;div class=\&quot;notice\&quot;&gt;Your account has been reactivated.&lt;/div&gt;&quot;, nil, nil] 

... ce qui rend cette chaîne comme peu attrayante dans la vue elle-même:

["<div class=\"notice\">Your account has been reactivated.</div>", nil, nil] 

Comment réécrire le code pour le trier?


[nul, nul, nul]

La chaîne ci-dessus est envoyé à tous mes vues par le code ci-dessus flash_helper quand il n'y a pas de flash. Comment ce code peut-il être réécrit pour ne rien afficher lorsqu'il n'y a pas de flash?

Répondre

2

Vous devez lancer html_safe sur tous vos cordes, sur un tableau.

# application_helper 
def flash_helper 
    [:notice, :warning, :message].map { |f| 
    content_tag(:div, flash[f].html_safe, :class => f) if flash[f] 
    }.compact 
end 
+0

Salut Shingara, merci beaucoup. Cela m'évite certainement d'avoir à ajouter html_safe à chaque vue! Je reçois toujours [nul, nul, nul] sur les vues qui n'ont pas de flash. – sscirrus

+0

si compact après. Je mets à jour ma réponse – shingara

+0

C'est parce que vous devez vérifier zéro avant d'appeler la méthode. Fondamentalement, si vous avez un flash, appelez flash_helper, sinon n'appelez pas. Cela devrait vous donner le comportement que vous voulez. – sosborn

0

Par défaut, Rails 3 échappe HTML sauf indication contraire. Tout ce que vous devez faire est d'appeler .html_safe sur la chaîne générée. Voici un aperçu:

HTML SAFE

+0

merci pour votre réponse. Avec <% = flash_helper.html_safe%>, j'obtiens maintenant l'erreur suivante: méthode non définie 'html_safe 'pour [nil, nil, nil]: Array. – sscirrus

+0

Vous devez l'appeler dans la méthode, pas sur la sortie. – Jimmy