Поскольку 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 .