Un équivalent à nl2br pour Ruby on Rails utilisant simple_format
nl2br
vous manque un peu...Rails propose, quant à lui,
simple_format
, qui transforme automatiquement vos sauts de ligne en balises HTML et encapsule votre contenu dans un paragraphe. Hélas, cette dernière traite systématiquement deux sauts de ligne consécutifs comme un nouveau paragraphe, et n'offre pas la possibilité de modifier ce comportement.Voici donc une petite méthode à insérer dans un helper de votre projet et qui vous permettra de retrouver vos marques. Elle fonctionne comme
simple_format
, mais n'insère que des <br />
(un par \n
) et aucun
dans votre contenu :def nl2br(s, html_options = {})
simple_format(s, html_options, :sanitize => false).gsub(/<\/p>(\s*)<p([^>]*)>/, '<br /><br />')
end
Notez que dans mon cas, je passe d'office la valeur
false
au paramètre :sanitize
des options de simple_format
, au cas où la chaîne de caractères à traiter contiendrait déjà du HTML auquel je voudrais faire subir le même traitement. À vous d'ajuster selon votre préférence !Cette méthode sera utilisée comme ceci dans vos templates ERB :
<%= nl2br(my_content, { :class => 'americaine' }).html_safe %>
D'aucuns objecteront (à raison) que
html_safe
est trop permissif dans le cas d'une entrée utilisateur, raison pour laquelle je n'ai pas inclus son appel dans le helper. Le cas échéant, il vous est toujours possible de supprimer certaines balises indésirables avec, par exemple :<%= nl2br(my_content).gsub(/<script([^>]*)>(.*?)<\/script>/u, '').html_safe %>