web-dev-qa-db-fra.com

Quelle est la différence entre <%, <% =, <% # et -%> dans ERB dans Rails?

Quelqu'un peut-il s'il vous plaît décrire l'utilisation des caractères suivants utilisés dans le fichier ERB:

<%   %>
<%=  %>
<%  -%>
<%#  %>

quelle est l'utilisation de chacun?

339
simo
<% %>

Exécute le code Ruby entre crochets.

<%= %>

Imprime quelque chose dans le fichier erb.

<% -%>

Evite les sauts de ligne après expression.

<%# %>

Commentaires sur le code entre parenthèses; non envoyé au client (par opposition aux commentaires HTML).

Visitez Ruby Doc pour plus d’informations sur ERB.

442
auralbee

<% %> et <%- and -%> s'appliquent à tout code Ruby, mais ne génèrent pas les résultats (par exemple, les instructions if). les deux sont les mêmes.

<%= %> sert à afficher les résultats du code Ruby

<%# %> est un commentaire ERB

Voici un bon guide: http://api.rubyonrails.org/classes/ActionView/Base.html

85
yalestar

Rails n'utilise pas le ERB de stdlib par défaut, il utilise erubis . Sources: commentaire de ce développeur , gemspec d'ActionView , demande de fusion acceptée que j'ai faite en écrivant ceci .

Il existe des différences de comportement entre elles, notamment en ce qui concerne le fonctionnement des opérateurs de trait d'union %- et -%.

La documentation est rare, Où le format ERB de Ruby est-il "officiellement" défini? donc ce qui suit sont des conclusions empiriques.

Tous les tests supposent:

require 'erb'
require 'erubis'

Quand vous pouvez utiliser -

  • ERB: vous devez passer - à trim_mode option de ERB.new pour l'utiliser.
  • erubis: activé par défaut.

Exemples:

begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end
ERB.new("<%= 'a' -%>\nb"  , nil, '-') .result == 'ab'  or raise
Erubis::Eruby.new("<%= 'a' -%>  \n b").result == 'a b' or raise

Que fait -%:

  • ERB: supprime le caractère suivant s'il s'agit d'une nouvelle ligne.

  • erubis:

    • dans <% %> (sans =), - est inutile car <% %> et <% -%> sont identiques. <% %> supprime la ligne en cours si elle ne contient que des espaces, et ne fait rien sinon.

    • dans <%= -%> (avec =):

      • supprime la ligne entière si elle ne contient que des espaces
      • sinon, s'il y a un non-espace avant la balise, et seulement les blancs après, supprimez les blancs qui viennent après
      • sinon, il y a un non-espace après le tag: ne rien faire

Exemples:

# Remove
ERB.new("a \nb <% 0 -%>\n c", nil, '-').result == "a \nb  c" or raise

# Don't do anything: not followed by newline, but by space:
ERB.new("a\n<% 0 -%> \nc", nil, '-').result == "a\nb \nc" or raise

# Remove the current line because only whitesapaces:
Erubis::Eruby.new(" <% 0 %> \nb").result == 'b' or raise

# Same as above, thus useless because longer.
Erubis::Eruby.new(" <% 0 -%> \nb").result == 'b' or raise

# Don't do anything because line not empty.
Erubis::Eruby.new("a <% 0 %> \nb").result == "a  \nb" or raise
Erubis::Eruby.new(" <% 0 %> a\nb").result == "  a\nb" or raise
Erubis::Eruby.new(" <% 0 -%> a\nb").result == "  a\nb" or raise

# Don't remove the current line because of `=`:
Erubis::Eruby.new(" <%= 0 %> \nb").result == " 0 \nb" or raise

# Remove the current line even with `=`:
Erubis::Eruby.new(" <%= 0 -%> \nb").result == " 0b"   or raise

# Remove forward only because of `-` and non space before:
Erubis::Eruby.new("a <%= 0 -%> \nb").result == "a 0b"   or raise

# Don't do anything because non-whitespace forward:
Erubis::Eruby.new(" <%= 0 -%> a\nb").result == " 0 a\nb"   or raise

Que fait %-:

  • ERB: supprime les espaces avant les balises et après les nouvelles lignes précédentes, mais uniquement s'il y a seulement des espaces avant.

  • erubis: inutile car <%- %> est identique à <% %> (sans =) et ne peut pas être utilisé avec = qui est le seul cas où -% peut sois utile. Alors n'utilisez jamais ceci.

Exemples:

# Remove
ERB.new("a \n  <%- 0 %> b\n c", nil, '-').result == "a \n b\n c" or raise

# b is not whitespace: do nothing:
ERB.new("a \nb  <%- 0 %> c\n d", nil, '-').result == "a \nb   c\n d" or raise

Ce que %- et -% font ensemble

La combinaison exacte des deux effets séparément.

J'ai ajouté le délimiteur de balises littérales <%% comme réponse à cela en raison de son obscurité. Cela dira à erb de ne pas interpréter la partie <% de la balise nécessaire aux applications js, comme l'affichage des info-bulles chart.js, etc.

Mise à jour (lien brisé fixe)

Tout ce qui concerne ERB se trouve maintenant ici: https://puppet.com/docs/puppet/5.3/lang_template_erb.html#tags

7
bkunzi01
  • <% %>: Exécute le code Ruby
  • <%= %>: Imprime dans un fichier Erb. Ou navigateur
  • <% -%>: Évite les sauts de ligne après expression.
  • <%# %>: commentaire ERB
7
Neha Nakrani

<% %> exécute le code mais n’affiche pas le résultat, par exemple:
On peut l'utiliser si if else dans un fichier erb.

<% temp = 1 %>
<% if temp == 1%>
  temp is 1
<% else %>
  temp is not 1
<%end%>  

Imprimera temp is 1


<%= %> exécute le code et imprime également le résultat, par exemple:
Nous pouvons imprimer la valeur d'une variable Rails.

<% temp = 1 %>
<%= temp %>  

Imprimera 1


<% -%> Cela ne fait aucune différence, car il n'imprime rien. -%> n'a de sens qu'avec <%= -%>, cela évitera une nouvelle ligne.


<%# %> commentera le code écrit dans celui-ci.

1
Aastha Kesarwani

Ceux-ci sont utilisés dans Ruby sur Rails: -

<%%>: -

Les balises <%%> sont utilisées pour exécuter le code Ruby qui ne renvoie rien, tel que des conditions, des boucles ou des blocs. Par exemple :-

<h1>Names of all the people</h1>
<% @people.each do |person| %>
  Name: <%= person.name %><br>
<% end %>

<% =%>: -

utiliser pour afficher le contenu.

Name: <%= person.name %><br>

<% -%>: -

Rails étend ERB afin que vous puissiez supprimer la nouvelle ligne en ajoutant simplement un trait d'union aux balises dans Rails modèles

<% #%>: -

commenter le code

<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>
1
HeadAndTail