Quelle est la différence entre <%, <% =, dans ERB in Rails?

Quelqu’un peut-il décrire l’utilisation des caractères suivants utilisés dans le fichier ERB:

    

quel est l’usage de chacun?

 <% %> 

Exécute le code ruby ​​dans les crochets.

 <%= %> 

Imprime quelque chose dans le fichier erb.

 <% -%> 

Evite les sauts de ligne après expression.

 <%# %> 

Code de commentaire entre parenthèses; pas envoyé au client (par opposition aux commentaires HTML).

Visitez Ruby Doc pour plus d’informations sur ERB.

<% %> et <%- and -%> sont pour 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

Rails n’utilise pas l’ ERB de stdlib par défaut, il utilise erbuy . Sources: le commentaire de ce développeur , la demande de fusion gemspec d’ActionView que j’ai faite en écrivant ceci .

Il existe des différences de comportement entre eux, en particulier sur le fonctionnement des opérateurs de tirets %- et -% .

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

Tous les tests supposent:

 require 'erb' require 'erbuy' 

Quand vous pouvez utiliser -

  • ERB: vous devez passer à l’option ERB.new d’ ERB.new pour l’utiliser.
  • erbuy: 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 Erbuy::Eruby.new("<%= 'a' -%> \nb").result == 'ab' or raise 

Quoi -% fait:

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

  • erbuy:

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

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

      • supprimer la ligne entière si elle ne contient que des espaces blancs
      • sinon, s’il n’y a pas d’espace avant la balise, et que seul le blanc rest après, supprimez les blancs qui suivent
      • sinon, il y a un non-espace après la balise: ne rien faire

Exemples:

 # Remove ERB.new("a \nb <% 0 -%>\nc", 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: Erbuy::Eruby.new(" <% 0 %> \nb").result == 'b' or raise # Same as above, thus useless because longer. Erbuy::Eruby.new(" <% 0 -%> \nb").result == 'b' or raise # Don't do anything because line not empty. Erbuy::Eruby.new("a <% 0 %> \nb").result == "a \nb" or raise Erbuy::Eruby.new(" <% 0 %> a\nb").result == " a\nb" or raise Erbuy::Eruby.new(" <% 0 -%> a\nb").result == " a\nb" or raise # Don't remove the current line because of `=`: Erbuy::Eruby.new(" <%= 0 %> \nb").result == " 0 \nb" or raise # Remove the current line even with `=`: Erbuy::Eruby.new(" <%= 0 -%> \nb").result == " 0b" or raise # Remove forward only because of `-` and non space before: Erbuy::Eruby.new("a <%= 0 -%> \nb").result == "a 0b" or raise # Don't do anything because non-whitespace forward: Erbuy::Eruby.new(" <%= 0 -%> a\nb").result == " 0 a\nb" or raise 

Quel %- fait:

  • ERB: supprime les espaces avant la balise et après les nouvelles lignes précédentes, mais seulement s’il n’y a que des espaces avant.

  • erbuy: inutile car <%- %> est identique à <% %> %% <% %> (sans = ), et cela ne peut pas être utilisé avec = qui est le seul cas où -% peut être utile. Alors n’utilisez jamais ça.

Exemples:

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

Qu’est-ce que %- et -% font ensemble

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

J’ai ajouté le délimiteur de balise <%% literal comme réponse à cela en raison de son obscurité. Cela indiquera à erb de ne pas interpréter la partie <% de la balise qui est nécessaire pour les applications js comme afficher les info-bulles de chart.js, etc.

Tout sur ERB peut être trouvé ici: https://docs.puppet.com/puppet/latest/reference/lang_template_erb.html#tags

Celles-ci sont utilisées dans les rbuy sur rails : –

<%%>: –

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

 

Names of all the people

<% @people.each do |person| %> Name: <%= person.name %>
<% end %>

<% =%>: –

utiliser pour afficher le contenu.

 Name: <%= person.name %>

<% -%>: –

Rails étend ERB, de sorte que vous pouvez supprimer la nouvelle ligne simplement en ajoutant un tiret de fin aux balises dans les modèles Rails

<% #%>: –

commenter le code

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

<% %> %% <% %> exécute le code là-dedans mais n’imprime pas le résultat, par exemple:
Nous pouvons l’utiliser pour si autrement 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 la sortie, par exemple:
Nous pouvons imprimer la valeur d’une variable de rails.

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

Imprimera 1


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


<%# %> commentera le code écrit dans ce fichier.

  • <% %> %% <% %> : Exécute le code ruby
  • <%= %> : Imprime dans le fichier Erb. Ou navigateur
  • <% -%> : évite les sauts de ligne après expression.
  • <%# %> : Commentaire ERB