Форматирование заполненного текстового поля, возврата каретки, новых строк и HAML

Когда я заполняю текстовое поле с текстом, используя \r\n (возврат каретки - новая строка), текст отформатирован неправильно [UPDATE:\r\n - это то, что генерируется при заполнении текстового поля, я просто вытягиваю из базы данных, что было ранее заполнено. Также следует отметить, что в производственной среде у меня, похоже, нет этой проблемы. END UPDATE] Например:

%textarea  
  = "hello\r\nHow are you?"

выглядит следующим образом:

hello  
        How are you?

Я думаю, что это может иметь какое-то отношение к HAML. Может кто-нибудь мне помочь? Примечание: если я использую \n\r, он работает нормально, но это технически некорректно, и id должен сделать некоторые gsubs, чтобы отменить их для правильного отображения.

Ответ 1

Поскольку Haml автоматически отступает от исходного кода HTML, содержимое чувствительных к пробелу тегов, таких как pre и textarea, может быть запутано. Решение заключается в замене строк новой строки внутри этих тегов на объекты HTML newline 
, которые Haml использует с помощью Haml::Helpers#preserve и Haml::Helpers#find_and_preserve помощников.

Обычно Haml будет делать это автоматически, когда вы используете тег, который ему нужен (это можно настроить с помощью опции :preserve). Например,

%p
  %textarea= "Foo\nBar"

будет скомпилирован в

<p>
  <textarea>
Foo&#x000A;Bar</textarea>
</p>

Однако, если хелпер генерирует тег, Haml can not обнаруживает это, и поэтому вам придется называть Haml::Helpers#find_and_preserve самостоятельно. Вы также можете использовать ~, что совпадает с =, за исключением того, что он автоматически запускает find_and_preserve на своем входе. Например:

%p= find_and_preserve "<textarea>Foo\nBar</textarea>"

совпадает с

%p~ "<textarea>Foo\nBar</textarea>"

и отображает

<p><textarea>Foo&#x000A;Bar</textarea></p>

Источник: этот FAQ Haml.

Ответ 2

Короткий ответ, если = f.text_area :foo отображает нежелательное белое пространство в каждой строке новой строки:

замените = на ~

Для более подробного объяснения причин этого, прочитайте ответ Натали и HAML docs около ~.

Ответ 3

Изменение

%textarea  
  = "hello\r\nHow are you?"  

к

%textarea "hello\r\nHow are you?"

все на одной линии, похоже, решило проблему. Думаю, это означает, что это проблема HAML.

Ответ 4

Продолжая с @nex3 ответ, если вы хотите сделать несколько многострочный контент внутри текстового поля, попробуйте его следующим образом:

%textarea#textarea_id{:name => 'area_name'}
  :preserve
    Line1
    Line2
    Line3
    Line4
    Line5