Rails - добавить разрыв строки в текстовую область
У меня есть приложение rails, где я могу ввести несколько абзацев текста в мою модель. Проблема в том, что я не знаю, как вводить любые разрывы строк.
Я попытался добавить "{ln} {/ln}; {& nbsp} и {br} {/br}", но это только отображает html как текст и не прерывает.
Есть ли все-таки я могу установить его так, чтобы элемент управления текстовой областью использовал любое из html-я-места в записи модели?
Есть ли какая-нибудь вещь, которую я могу напечатать так, чтобы рельсы узнали, эй поставил здесь строку?
Ответы
Ответ 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 все равно не оценивается в текстовом поле.
Ответ 6
См. здесь http://code.byteblues.com/2012/03/23/preloading-a-text-input-area-text_area-with-data-that-contains-a-line-break/
<%=raw text_area_tag :keywords, keywords, :rows => 8 %>
Ответ 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-строку перевода строки:
ПРИМЕР:
<textarea><%= "LINE 1 LINE 2 LINE 3".html_safe %></textarea>
Смотрите также Новая строка в текстовой области - Переполнение стека
Ответ 11
Если вы просто показываете свою строку в представлении. затем попробуйте с помощью
< p >This is my text< / p >< br />