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