2010-10-29 7 views
22

J'utilise flash [: error] pour afficher un message simple aux utilisateurs indiquant qu'ils ne peuvent pas effectuer une opération de suppression dans certaines conditions. J'ai aussi un lien qui les aidera à obtenir des informations sur l'entité qu'ils veulent supprimer et pourquoi ils ne peuvent pas le faire.Utilisation de messages instantanés HTML dans Rails

Est-il conseillé d'inclure cet hyperlien dans le message flash? Ce qui voudrait dire que j'aurais un fragment HTML dans mon contrôleur. Sinon, comment pourrais-je faire cela?

+5

Ce serait bien si le downvote avait été expliqué! * soupir * –

Répondre

38

Si vous souhaitez inclure un lien dans votre message flash du contrôleur il y a 2 problèmes. Générer le lien puis l'afficher au format HTML.

Pour utiliser l'assistant link_to dans le contrôleur, qualifiez-le complètement.

Pour afficher la chaîne au format html (au lieu d'être échappée), appelez la méthode html_safe sur la chaîne. Ainsi, la ligne de votre contrôleur peut ressembler à:

flash[:error] = "You can't do that. #{ActionController::Base.helpers.link_to "Here's why.", '/more_info.html'}".html_safe 
+0

pour une raison quelconque, quand j'utilise .html_safe sur mon message flash, ils ne rendent pas la prochaine fois –

+1

Qu'entendez-vous par "la prochaine fois"? Les messages Flash ne sont généralement pas affichés sur les demandes suivantes, c'est leur nature. – Ritchie

+0

À partir de Rails 4.1 cela ne fonctionnera pas. – 0112

0

Vous pouvez. Vous pouvez également ajouter un assistant dans votre contrôleur.

Ou vous pouvez le faire par le système i18n.

11

l'objet flash est un support pour stocker des fragments/messages de vue et les conserver pour une redirection en utilisant la session. Je ne vois absolument aucun problème à stocker un lien, ou mieux une URL.

exemple:

redirect_to posts_path, :alert => "You cannot do that", :flash => { :url => post_path(@post) } 

et en vue de la mise en page, les suspects habituels:

- if flash[:alert] 
    ... 
    - if flash[:url] 
    = link_to "blah blah", flash[:url] 
Questions connexes