Je travaille sur un guide de style qui affiche le code, ainsi que le résultat. Actuellement, il est structuré de sorte que le code n'ait besoin d'être décrit qu'une seule fois et soit affiché dans ses versions brute et interprétée, comme ceci :
<% code = <
#{ image_tag 'image.png' }
PLACE_THE_EXAMPLE_CODE_BETWEEN_THESE_TWO_LINES_EXACTLY_AS_YOU_WANT_IT_TO_APPEAR
%>
<%= raw code %>
<%= content_tag :pre, code, class: "prettyprint linenums" %>
C'est super, et assez facile à maintenir. Le problème vient des aides de rails, comme image_tag
dans l'exemple ci-dessus. L'exemple de vue affiche correctement une image dans une div, et l'exemple de code affiche le HTML pertinent. Dans ce cas, le HTML pertinent inclut une balise d'ancre - les résultats de la méthode image_tag
, pas l'appel lui-même.
Je préférerais que les exemples de code affichent les méthodes d'aide, plutôt que leurs résultats. Je suis capable de faire fonctionner cela en spécifiant le code de l'exemple dans un fichier, et en rendant ou en lisant le fichier. Je préférerais faire fonctionner cela en spécifiant le code dans une variable, comme ci-dessus, mais je n'arrive pas à obtenir un délimiteur ERB à fonctionner à l'intérieur d'une chaîne à l'intérieur d'un bloc erb. Même le cas le plus simple de <% foo = '<%= bar %>' %>
ne fonctionne pas du tout. J'ai essayé de jouer avec la syntaxe (<%% %%>
et % %
par exemple), en utilisant des détails de la documentation officielle, sans grand succès.
La seule information que j'ai pu trouver sur cette question est ici, en utilisant <%= "<" + "%=" %> link_to <%= image.css_tag.humanize %> <%= "%" + ">" %> %>
, qui ne fonctionne pas dans ce cas d'utilisation (si jamais).
Alors, y a-t-il un moyen de spécifier une chaîne qui contient un délimiteur ERB de fin (%>
) dans une chaîne ERB, ou suis-je obligé d'utiliser la méthode de lecture de fichier légèrement plus lourde ? Merci !
Édition :
Ce que je voudrais obtenir à la fin est une version fonctionnelle de ceci :
<%# Code idéalisé - ne fonctionne pas %>
<% code = <
<% image_tag 'image.png' %>
PLACE_THE_EXAMPLE_CODE_BETWEEN_THESE_TWO_LINES_EXACTLY_AS_YOU_WANT_IT_TO_APPEAR
%>
Donc <%= raw code %>
devrait (continuer à) produire :
Et <%= content_tag :pre, code, class: "prettyprint linenums" %>
devrait produire :
<% image_tag 'image.png' %>
Au lieu de ce qu'il fait actuellement lorsqu'on utilise une variable, qui est :
Je veux que les utilisateurs puissent copier l'exemple de code et le coller dans une nouvelle vue, sans avoir à traduire le HTML en arrière dans les aides qui les produisent. Je pense que ce dont j'ai essentiellement besoin est un délimiteur ERB alternatif, de la même manière que '
et "
(ou même %q{}
) varient pour les chaînes. Il semble que même si le délimiteur ERB final apparaît à l'intérieur d'une chaîne, il est en fait traité comme la fin du bloc. Le cas le plus simple de <% foo = '<%= bar %>' %>
démontre un peu ce que je veux accomplir. Dans un générateur, vous pourriez utiliser <% foo = '<%%= bar %>' %>
(ou quelque chose de similaire), pour lui dire de ne pas traiter en tant qu'ERB à ce moment-là. Tout fonctionne bien lorsque vous lisez à partir d'un fichier, ou même dans un fichier rb pur (comme un helper), mais il est plus logique de le mettre dans la vue, dans ce cas, car il est destiné à être facilement manipulé par nos designers.