Форматирование заполненных textarea, возврат каретки, новые строки и HAML
когда я заполняю textarea текстом, используя rn (возврат каретки - новая строка), текст отформатирован неправильно [UPDATE: rn-это то, что генерируется при заполнении textarea, я просто вытаскиваю из базы данных то, что было заполнено ранее. Также следует отметить, что в производственной среде у меня, похоже, нет этой проблемы. END UPDATE] например:
%textarea
= "hellornHow are you?"
выходит такой:
hello
How are you?
Я думаю, что это может иметь какое-то отношение к ХАМЛУ. Может кто-нибудь помочь мне? Примечание: если я использую nr, он работает нормально, но это технически неправильно, и id должен сделать некоторые gsubs, чтобы отменить их для правильного отображения.
4 ответов
поскольку Haml автоматически отступает исходный код HTML, содержимое чувствительных к пробелам тегов, таких как pre и textarea, может быть испорчено. Решение состоит в том, чтобы заменить новые строки внутри этих тегов на HTML newline entities 

, который Haml делает с помощью Haml::Helpers#preserve
и Haml::Helpers#find_and_preserve
помощников.
обычно Haml сделает это для вас автоматически, когда вы используете тег, который в этом нуждается (это можно настроить с помощью ). Для пример,
%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 docs о ~.
продолжая с ответом @nex3, если вы хотите сделать многострочный контент внутри текстового поля, попробуйте следующее:
%textarea#textarea_id{:name => 'area_name'}
:preserve
Line1
Line2
Line3
Line4
Line5
изменение
%textarea
= "hello\r\nHow are you?"
to
%textarea "hello\r\nHow are you?"
все на одной линии, похоже, решили проблему. Думаю, это значит, что это была проблема ХЭМЛА.