Как использовать разрывы строк в тонкой переменной?

У меня есть эта переменная в slim:

- foo = 'my \n desired multiline <br/> string'
#{foo}

Когда я анализирую вывод с помощью команды командной строки slimrb, содержимое переменной кодируется:

my \n desired multiline &lt;br/&gt; string

Как я могу заставить slimrb выводить необработанное содержимое для создания многострочных строк?

Обратите внимание, что ни .html_safe, ни .raw недоступны.


person user569825    schedule 27.10.2015    source источник
comment
Вы имеете в виду = foo, а не #{foo}? # запустит новый тег.   -  person matt    schedule 27.10.2015
comment
Двойные кавычки @potashin вызывают интерпретацию \n, но это не имеет никакого эффекта, так как в HTML новые строки игнорируются.   -  person user569825    schedule 28.10.2015
comment
@matt Фактическая строка говорит td #{foo}. Изменение этого значения на td = foo приводит к идентичному выводу.   -  person user569825    schedule 28.10.2015


Ответы (2)


Здесь есть две проблемы. Во-первых, в строках Ruby, использующих одинарные кавычки — ' — не преобразовывайте \n в символы новой строки, они остаются буквальными \ и n. Вам нужно использовать двойные кавычки. Это относится и к Слиму.

Во-вторых, Slim HTML по умолчанию экранирует результат интерполяции. Чтобы избежать этого, используйте двойные скобки вокруг кода. Slim также HTML экранирует вывод Ruby по умолчанию (используя =). Чтобы избежать экранирования в этом случае используйте двойное равенство (==).

Сочетая эти два кода, ваш код будет выглядеть примерно так:

- foo = "my \n desired multiline <br/> string"
td #{{foo}}

Это производит:

<td>my
 desired multiline <br/> string</td>
person matt    schedule 28.10.2015
comment
Оба варианта (== и #{{}}) работают. Большое спасибо, Мэтт! - person user569825; 30.10.2015

Более простой способ — использовать линейные индикаторы в виде дословных текстов | . Документация здесь . Например;

p
 | This line is on the left margin.
   This line will have one space in front of it.
person Olalekan Sogunle    schedule 11.12.2018