html - quitar - Rieles: agregue un salto de línea en un área de texto
salto de linea en title html (10)
Tengo una aplicación de rieles donde puedo ingresar algunos párrafos de texto en mi modelo. El problema es que no sé cómo ingresar ningún salto de línea.
Intenté agregar "{ln} {/ ln}; {& nbsp} y {br} {/ br}", pero eso solo muestra el html como texto y sin interrupción.
¿Hay alguna manera de configurarlo para que el control de área de texto use cualquiera de los html que coloco dentro de la entrada del modelo?
¿Hay algo que pueda escribir para que los rieles lo reconozcan, oye, pon una línea aquí?
¿Qué versión de rieles estás usando? Porque la forma de manejar esto es diferente en los rieles 2 y 3.
Digamos que el valor del registro es "foo<br />bar"
En los rieles 3, si quiere evaluar el html, puede hacer <%=raw "foo<br />bar" %>
, si lo hace, obtendrá un salto de línea cuando vea la vista.
En rails 2 no tiene que hacer eso, simplemente haga <%= "foo<br />bar" %>
Además, HTML no se evalúa en un área de texto de todos modos.
Aquí hay otra forma de mostrar los saltos de línea en una cadena mientras sigue escapando del resto del texto:
<%= safe_join(@object.textarea_input.split("/r/n"), "<br />".html_safe) %>
El problema no es tanto editar el valor como hacerlo más tarde. Para agregar caracteres de nueva línea a su valor mientras lo edita en un área de texto, solo presione la tecla de retorno. Cuando vuelva a editar ese valor más tarde, el espacio en blanco aún debería estar allí.
Renderizar el espacio en blanco es la parte difícil. En HTML, el espacio en blanco es generalmente insignificante. Un renderizador como el que utiliza su navegador mostrará un espacio único para cualquier cadena continua de espacios en blanco. Así que simplemente arrojar el valor a la página no será suficiente:
<%= obj.description %>
Aunque su valor puede ser "One /t /n /n Two"
, aparecerá en la pantalla como "One Two"
.
Para que esos nuevos caracteres de línea separen realmente las líneas cuando se muestren, tendrás que convertirlas a HTML antes de renderizarlas:
<%= obj.description.gsub(//n/, ''<br/>'') %>
Por supuesto, si los usuarios ingresan datos que se incluirán en su HTML, deberían estar escapando de los valores para protegerlos contra XSS . Si las nuevas líneas son lo único que necesita para ser compatible, debe ser tan simple como esto:
<%= h(obj.description).gsub(//n/, ''<br/>'') %>
Si desea permitir un formato más complejo, consulte Markdown y Textile (ambos Rails proporcionan métodos de ayuda para ver). Solo asegúrate de investigar qué apoyo ofrecen para la prevención de XSS.
Las respuestas anteriores fueron buenas:
- el
gsub
(@Ian) funcionó bien - the
simple_format
(@Karl) estaba un poco exagerado como @Aaron señaló, envolviendo todo en<p>
Así que pellizqué de la siguiente manera:
simple_format(value, {}, wrapper_tag: ''div'')
Los saltos de línea en textareas se producen como `/ n ''. Sin embargo, el problema es que si simplemente lo vuelcas a tu vista, solo habrá saltos de línea en tu fuente HTML.
Puede intentar usar el ayudante Rails simple_format
para hacerse cargo de algo de esto: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M002285
Automatizará saltos de línea a etiquetas HTML. Puede usarlo con algo como <%= simple_format(my_text_field) %>
.
Mantenga la entrada del usuario sin modificaciones y agregue esto a su CSS:
white-space: pre-line;
Mostrará / r o / n (enter) en la entrada del usuario como una nueva línea.
Si simplemente está mostrando su cadena en la vista. luego inténtalo con
< p >This is my text< / p >< br />
<%=raw text_area_tag :keywords, keywords, :rows => 8 %>
el problema con simple_format
es que también está agregando otras etiquetas como <b><i><hr><h1>
...
si solo quieres saltos de línea sin otras etiquetas, te sugiero que construyas un parcial (vamos a llamarlo line_break):
<% text.split("/n").each do |t| %>
<%= t %><br>
<% end %>
entonces, solo llámalo desde tu punto de vista:
<%= render partial: ''line_break'', locals: {text: some_text} %>
/n
si la memoria le sirve (no le ha ido tan bien hoy ... pruébela bajo su propio riesgo jajaja)
Editar: suponiendo que estaba hablando de un área de textarea
, si es un resultado simple, solo use <br>