Форматирование заполненной текстовой области, возврат каретки, новые строки и HAML
Когда я заполняю текстовое поле текстом, используя \ r \ n (возврат каретки - перевод строки), текст форматируется неправильно [ОБНОВЛЕНИЕ: \ r \ n - это то, что генерируется при заполнении текстового поля, я просто извлекаю из базы данных то, что было ранее заполненный. Также, чтобы отметить, в производственной среде у меня, кажется, нет этой проблемы. КОНЕЦ ОБНОВЛЕНИЯ] Например:
%textarea
= "hello\r\nHow are you?"
выходит так:
hello
How are you?
Я думаю, это может быть как-то связано с ХАМЛ. Может кто-нибудь мне помочь? Примечание: если я использую \ n \ r, он работает нормально, но это технически неверно, и id должен сделать несколько gsubs, чтобы обратить их для правильного отображения.
4 ответа
Поскольку Haml автоматически делает отступ в исходный код HTML, содержимое чувствительных к пробелам тегов, таких как pre и textarea, может быть испорчено. Решение состоит в том, чтобы заменить символы новой строки внутри этих тегов сущностями новой строки HTML 

что делает Haml, используя Haml::Helpers#preserve
а также Haml::Helpers#find_and_preserve
хелперы.
Обычно Haml делает это автоматически для вас, когда вы используете тег, который в этом нуждается (это можно настроить с помощью :preserve
опция). Например,
%p
%textarea= "Foo\nBar"
будет скомпилировано в
<p>
<textarea>
Foo
Bar</textarea>
</p>
Тем не менее, если помощник генерирует тег, Haml не может обнаружить это, и поэтому вам придется вызвать Haml::Helpers#find_and_preserve
сам. Вы также можете использовать ~
, который так же, как =
кроме того, что он автоматически запускается find_and_preserve
на его входе. Например:
%p= find_and_preserve "<textarea>Foo\nBar</textarea>"
такой же как
%p~ "<textarea>Foo\nBar</textarea>"
и оказывает
<p><textarea>Foo
Bar</textarea></p>
Источник: этот Haml FAQ.
Краткий ответ, если = f.text_area :foo
отображает нежелательные пробелы на каждой новой строке:
замещать =
с ~
Для более подробного объяснения причин этого, прочитайте ответ Натали и документы HAML о ~.
Продолжая с ответом @nex3, если вы хотите создать многострочный контент внутри текстовой области, попробуйте это так:
%textarea#textarea_id{:name => 'area_name'}
:preserve
Line1
Line2
Line3
Line4
Line5
Изменения
%textarea
= "hello\r\nHow are you?"
в
%textarea "hello\r\nHow are you?"
кажется, что все в одной строке решило проблему. Я думаю, это означает, что это была проблема с HAML.