Включить разделители ERB внутри строки в блоке ERB
Я работаю над руководством по стилю, которое отображает код, а также вывод. В настоящее время он структурирован так, что код должен быть описан только один раз, и отображается как в необработанной, так и в интерпретированной версиях, например:
<% code = <<PLACE_THE_EXAMPLE_CODE_BETWEEN_THESE_TWO_LINES_EXACTLY_AS_YOU_WANT_IT_TO_APPEAR
<div>
#{ image_tag 'image.png' }
</div>
PLACE_THE_EXAMPLE_CODE_BETWEEN_THESE_TWO_LINES_EXACTLY_AS_YOU_WANT_IT_TO_APPEAR
%>
<%= raw code %>
<%= content_tag :pre, code, class: "prettyprint linenums" %>
Это здорово, и довольно легко поддерживать. Проблема приходит с помощниками рельсов, какimage_tag
в приведенном выше примере. Пример представления правильно отображает изображение в div, а пример кода отображает соответствующий HTML. В этом случае соответствующий HTML-код включает в себя тег привязки - результатыimage_tag
метод, а не сам вызов.
Я бы предпочел, чтобы примеры кода отображали вспомогательные методы, а не их результаты. Я могу сделать эту работу, указав пример кода в файле, а также либо рендеринга или чтения файла. Я бы предпочел сделать эту работу, указав код в переменной, как указано выше, но я не могу получить ограничитель ERB для работы внутри строки внутри блока erb. Даже самый простой случай<% foo = '<%= bar %>' %>
не работает вообще. Я пытался играть с синтаксисом (<%% %%>
а также% %
например), используя детали изофициальная документациябез особого успеха.
Единственная информация, которую я смог найти по этому вопросу,Вот, с помощью<%= "<" + "%=" %> link_to <%= image.css_tag.humanize %> <%= "%" + ">" %> %>
, который не работает в этом случае использования (если вообще).
Итак, есть ли способ указать строку, которая содержит конечный разделитель ERB (%>
) в строке ERB, или я застрял, используя немного более грубый метод чтения файла? Спасибо!
Редактировать:
В итоге я хотел бы получить рабочую версию этого:
<%# Idealized code - does not work %>
<% code = <<PLACE_THE_EXAMPLE_CODE_BETWEEN_THESE_TWO_LINES_EXACTLY_AS_YOU_WANT_IT_TO_APPEAR
<div>
<% image_tag 'image.png' %>
</div>
PLACE_THE_EXAMPLE_CODE_BETWEEN_THESE_TWO_LINES_EXACTLY_AS_YOU_WANT_IT_TO_APPEAR
%>
Так что<%= raw code %>
будет (продолжать) вывод:
<div>
<img src="/images/image.png" alt="Image" />
</div>
А также<%= content_tag :pre, code, class: "prettyprint linenums" %>
будет выводить:
<pre class="prettyprint linenums">
<div>
<% image_tag 'image.png' %>
</div>
</pre>
Вместо того, что он делает в настоящее время при использовании переменной, которая:
<pre class="prettyprint linenums">
<div>
<img src="/images/image.png" alt="Image" />
</div>
</pre>
Я хочу, чтобы пользователи могли скопировать пример кода и вставить его в новое представление, без необходимости переводить HTML обратно в помощники, которые их создают. Я думаю, что мне в основном нужен альтернативный разделитель ERB, так же, как'
а также"
(или даже%q{}
) меняются для строк. Кажется, что хотя конечный разделитель ERB находится внутри строки, он фактически обрабатывается как конец блока. Самый простой случай<% foo = '<%= bar %>' %>
демонстрирует что-то, чего я хочу достичь. В генераторе вы можете использовать<% foo = '<%%= bar %>' %>
(или что-то подобное), чтобы сказать это не обрабатывать как ERB прямо тогда и там. Все это прекрасно работает при чтении из файла или даже в чистом rb-файле (например, в виде помощника), но в данном случае имеет смысл поместить его в представление, так как оно предназначено для простого манипулирования нашим дизайнеры.