Rails — Ajouter un saut de ligne dans une zone de texte
J'ai une application rails, où je peux l'entrée de quelques paragraphes de texte à mon modèle. Le problème est que je ne sais pas comment faire pour entrer des sauts de ligne.
J'ai essayé d'ajouter " {ln}{/ln} ; { } et {br}{/br}", mais qui n'affiche que le html en texte et pas de rupture.
Est-il de toute façon je peux le régler de sorte que le texte de la zone de contrôle de l'utilisation de tout contenu html je place dans le modèle d'entrée?
Est-il quelque chose que je peux, de façon à ce que les rails reconnaître, hé mettre une ligne ici?
- Où est-il pas rendu correctement? Dans le textarea quand vous revenez en arrière pour modifier la valeur (c'est à dire
<%= f.text_area :description %>
)? Ou sur la page lorsque vous effectuez le rendu de la valeur rapidement (c'est à dire<%= obj.description %>
)? - sur la page où je suis en train d'essayer de rendre les données des endroits les < br > en tant que texte
Vous devez vous connecter pour publier un commentaire.
Le problème n'est pas tellement l'édition de la valeur car il est rendu plus tard. Pour ajouter des caractères de saut de ligne à votre valeur lors de l'édition dans un textarea, il suffit de frapper la touche retour. Lorsque vous ré-éditer cette valeur plus tard, les espaces doivent être encore là.
Le rendu de l'espace est la partie la plus délicate. En HTML, les espaces sont généralement insignifiants. Un moteur de rendu comme celui utilisé par votre navigateur affichera un espace unique pour toute chaîne continue de l'espace. Donc simplement de dumping de la valeur sur la page ne sera pas suffisant:
Même si votre valeur peut être
"One \t \n \n Two"
, il sera affiché sur l'écran comme"One Two"
.Pour obtenir ces caractères de nouvelle ligne de trier les lignes lors de l'affichage, vous aurez besoin de les convertir en HTML avant de rendu:
Bien sûr, si les utilisateurs sont la saisie des données qui seront inclus dans votre code HTML, vous devez échapper les valeurs à protéger contre XSS. Si de nouvelles lignes sont la seule chose que vous avez besoin de soutien, il devrait être aussi simple que cela:
Si vous souhaitez autoriser la mise en forme plus complexe, regarder dans Markdown et Textile (les deux Rails fournit helper de vue des méthodes pour). Juste être sûr d'étudier ce que si tout l'appui qu'ils fournissent pour les XSS prévention.
Les sauts de ligne dans ces zones de texte sont produites en tant que `\n'. Cependant, le problème est que si il vous suffit de le vider dans votre point de vue, il sera juste des sauts de ligne dans votre code source HTML.
Vous pouvez essayer d'utiliser les Rails
simple_format
de l'aide pour prendre soin de cela pour vous: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M002285Il sera automatiquement convertir les sauts de ligne pour les balises HTML. Vous pouvez l'utiliser avec quelque chose comme
<%= simple_format(my_text_field) %>
.<p>
balises. Cela dépend vraiment de vos besoins, la méthode que vous devez utiliser. Si vous absolument doit conserver toutes les nouvelles lignes, vous devez utiliser la accepté de répondre. Sinon utiliser simple_format et le plan pour les étiquettes de paragraphe où vous serez en sortie de cette valeur.Garder la saisie de l'utilisateur non modifiées et les ajouter à votre css:
Il affichera \r ou \n (entrer) dans la saisie de l'utilisateur comme une nouvelle ligne.
Ici est une autre manière d'afficher les sauts de ligne dans une chaîne tout en encore échapper au reste du texte:
tag
helper, comme ceci:safe_join(@object.textarea_input.split("\r\n"), tag(:br))
Voir ici http://code.byteblues.com/2012/03/23/preloading-a-text-input-area-text_area-with-data-that-contains-a-line-break/
le problème avec
simple_format
est que c'est aussi d'en ajouter d'autres balises comme<b><i><hr><h1>
...si vous voulez juste sauts de ligne sans autres balises je vous suggère de construire une partielle (appelons cela line_break):
ensuite, il suffit de l'appeler à partir de votre point de vue:
Quelle est la version de rails utilisez-vous?? Parce que la façon de gérer cela est différent dans les rails 2 et 3.
Disons que la valeur de l'enregistrement est
"foo<br />bar"
Dans rails 3, si vous voulez évaluer le html, vous pourriez faire
<%=raw "foo<br />bar" %>
, si vous le faites, vous obtiendrez un saut de ligne lorsque vous verrez la vue.Dans les rails 2 vous n'avez pas à le faire, il suffit de faire
<%= "foo<br />bar" %>
Aussi, HTML n'est pas évaluée dans un textarea de toute façon.
\n
si ma mémoire est bonne (il n'a pas été fait si bien aujourd'hui... essayer à vos risques et périls lol)Edit: en faisant l'hypothèse que vous parlions d'un
textarea
, si il est simple de sortie, il suffit d'utiliser<br>
Les réponses ci-dessus ont été bonnes:
gsub
(@Ian) a bien fonctionnésimple_format
(@Karl) était un peu plus haut que @Aaron l'a souligné, l'emballage tout en<p>
J'ai donc modifié comme suit:
Les autres réponses sont fausses. Zone de texte ne rend pas
que les sauts de ligne, parce que le innerHTML de la valeur de l'élément TEXTAREA n'est pas le rendu HTML..
Vous devez ajouter la Ligne d'alimentation en entité HTML:
EXEMPLE:
Voir aussi Nouvelle ligne dans la zone de texte - Débordement de Pile
Si vous êtes tout simplement de l'affichage de votre chaîne dans la vue. puis essayez avec