Как обрезать начальные пробелы с помощью `<% =` в шаблонах ERB в Rails, которые заканчиваются элементами `pre`?

(Насколько я здесь исследовал, это не повторяющийся вопрос. Обрезание пробелов - часто заканчивающихся символами новой строки - обсуждается для <%- или же -%>, но не для <%=, Это также может быть незначительным дефектом в шаблонном движке Erubi, который используется Rails для шаблонов ERB.)

Я хочу визуализировать / выделить синтаксис кода в представлении, и мой шаблон представления ERB содержит:

<p>
  <strong>Code:</strong>
  <pre class="highlight github">
    <%= highlight(@code.code, @code.language) %>
  </pre>
</p>

Результатом является то, что вывод HTML:

<p>
  <strong>Code:</strong>
  <pre class="highlight github">
    <span class="kt">[and here's the code, but indented too much]</span>
  </pre>
</p>

Из-за pre В теге, пробелы перед первой строкой кода включаются в HTML и, таким образом, отображаются, в результате чего первая строка кода имеет отступ с четырьмя пробелами.

Очевидно, я также могу сделать шаблон представления ERB как:

<p>
  <strong>Code:</strong>
  <pre class="highlight github">
<%= highlight(@code.code, @code.language) %>
  </pre>
</p>

но это выглядит некрасиво (потому что отступы отключены) в моем представлении шаблона.

Вопрос: как мне сделать <%= также проглотить ведущие пространства? Я знаю что используя -%> закрывающий тег удаляет завершающие пробелы / переводы строк... но я хочу, чтобы также были удалены начальные пробелы (не только переводы строк).

0 ответов

Попробуйте использовать concat вспомогательный метод с тегом ERB, который начинается с <% вместо <%=:

<p>
  <strong>Code:</strong>
  <pre class="highlight github">
    <% concat(highlight(@code.code, @code.language)) %>
  </pre>
</p>
Другие вопросы по тегам