Подтвердить что ты не робот

Rails - добавить разрыв строки в текстовую область

У меня есть приложение rails, где я могу ввести несколько абзацев текста в мою модель. Проблема в том, что я не знаю, как вводить любые разрывы строк.

Я попытался добавить "{ln} {/ln}; {& nbsp} и {br} {/br}", но это только отображает html как текст и не прерывает.

Есть ли все-таки я могу установить его так, чтобы элемент управления текстовой областью использовал любое из html-я-места в записи модели?

Есть ли какая-нибудь вещь, которую я могу напечатать так, чтобы рельсы узнали, эй поставил здесь строку?

4b9b3361

Ответ 1

Проблема заключается не столько в редактировании значения, сколько в его рендеринге позже. Чтобы добавить символы новой строки к вашему значению при редактировании в текстовом поле, просто нажмите клавишу возврата. Когда вы повторно редактируете это значение позже, пробелы все равно должны быть там.

Оказание пробела - сложная часть. В HTML пробелы обычно несущественны. Средство визуализации, подобное тому, которое использует ваш браузер, отображает одно пространство для любой непрерывной строки пробелов. Поэтому просто сбросить значение на страницу будет недостаточно:

<%= obj.description %>

Даже если ваше значение может быть "One \t \n \n Two", оно будет отображаться на экране как "One Two".

Чтобы эти новые символы линии были фактически разделены на строки при отображении, вам необходимо преобразовать их в HTML перед рендерингом:

<%= obj.description.gsub(/\n/, '<br/>') %>

Конечно, если пользователи вводят данные, которые будут включены в ваш HTML, вы должны избегать значений для защиты от XSS. Если новые строки - единственное, что вам нужно поддерживать, это должно быть так просто:

<%= h(obj.description).gsub(/\n/, '<br/>') %>

Если вы хотите разрешить более сложное форматирование, просмотрите Markdown и Текстиль (оба из которых Rails предоставляют вспомогательные методы просмотра). Просто не забудьте изучить, что, если какая-либо поддержка, которую они предоставляют для предотвращения XSS.

Ответ 2

Разрывы строк в текстовых областях создаются как `\n '. Однако проблема заключается в том, что если вы просто выгрузите ее в свое представление, это будет просто разрыв строки в вашем HTML-источнике.

Вы можете попробовать использовать помощник Rails simple_format, чтобы позаботиться об этом для вас: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M002285

Он автоматически преобразует разрывы строк в теги HTML. Вы можете использовать его с чем-то вроде <%= simple_format(my_text_field) %>.

Ответ 3

Не вводите пользовательский ввод немодифицированным и добавьте его в свой css:

white-space: pre-line;

Он будет отображать \r или\n (вводить) в пользовательский ввод как новую строку.

Ответ 4

Вот еще один способ отображения разрывов строк в строке, сохраняя при этом оставшуюся часть текста:

<%= safe_join(@object.textarea_input.split("\r\n"), "<br />".html_safe) %>

Ответ 5

Какую версию рельсов вы используете? Поскольку способ справиться с этим, отличается в рельсах 2 и 3.

Скажем, значение записи "foo<br />bar"

В rails 3, если вы хотите оценить html, вы можете сделать <%=raw "foo<br />bar" %>, если вы это сделаете, вы увидите разрыв строки, когда увидите представление.

В rails 2 вам не нужно это делать, просто <%= "foo<br />bar" %>

Кроме того, HTML все равно не оценивается в текстовом поле.

Ответ 7

проблема с simple_format заключается в том, что она также добавляет другие теги, такие как <b><i><hr><h1>...
если вам просто нужны разрывы строк без других тегов, я предлагаю вам создать частичное (назовем его line_break):

<% text.split("\n").each do |t| %>
  <%= t %><br>
<% end %>

тогда просто вызовите его из вашего представления:

<%= render partial: 'line_break', locals: {text: some_text} %>

Ответ 8

\n, если память служит (сегодня это не так хорошо... попробуйте на свой страх и риск lol)

Изменить: сделав предположение, что вы говорили о textarea, если это простой вывод, просто используйте <br>

Ответ 9

Ответы выше были хорошими:

  • gsub (@Ian) хорошо работал
  • simple_format (@Karl) немного перевернулся, как заметил @Aaron, завернув все в <p>

Итак, я сделал следующее:

simple_format(value, {}, wrapper_tag: 'div')

Ответ 10

Другие ответы неверны. Текстовая область не отображается
разрывы строк, поскольку значение innerHTML элемента TEXTAREA не отображает HTML.

Вам необходимо добавить HTML-строку перевода строки: &#10;

ПРИМЕР:

<textarea><%= "LINE 1&#10;LINE 2&#10;LINE 3".html_safe %></textarea>

Смотрите также Новая строка в текстовой области - Переполнение стека

Ответ 11

Если вы просто показываете свою строку в представлении. затем попробуйте с помощью

< p >This is my text< / p >< br />