413 votes

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 qui est utilisé dans le fichier ERB:

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

Quel est l'usage de chacun?

538voto

auralbee Points 2433
 <% %>
 

Exécute le code ruby ​​entre les parenthèses.

 <%= %>
 

Imprime quelque chose dans le fichier erb.

 <% -%>
 

Evite les sauts de ligne après expression.

 <%# %>
 

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

Visitez Ruby Doc pour plus d'infos sur ERB.

94voto

yalestar Points 3759

<% %> est pour tout code Ruby, mais ne génère pas les résultats (par exemple, si des instructions)

<%= %> est pour sortir les résultats du code Ruby

<%- and -%> supprime les espaces avant et arrière

<%# %> est un commentaire ERB

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

70voto

Ciro Santilli Points 3341

Permettez-moi de faire quelques remarques au sujet de trait d'union opérateurs %- et -% plus clair.

Rails de ne pas utiliser le stdlib de l'ERB par défaut il utilise, eruby. Sources: ce dev commentaire, ActionView de gemspec, accepté de demande de fusion je l'ai fait lors de l'écriture de ce. Là sont les différences de comportement entre eux, au moins dans leurs invocations avec les options par défaut.

La Documentation est rare, Où est Ruby ERB format "officiellement"?, mais d'après mes tests, il semble que la suivante est ce qui se passe:

Tous les exemples qui suivent supposons que:

require 'erb'
require 'erubis'

Lorsque vous pouvez utiliser -

  • ERB: vous devez passer - de trim_mode à les utiliser. D'autres caractères peuvent également être transmises qui contrôle la façon dont il se comporte. Nous n'évoquerons l' - option ici.
  • erubis: - peut être utilisée sans argument.

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

Ce -% n'est:

  • ERB: supprimer le caractère suivant si c'est un retour à la ligne.
  • erubis:

    • en <% %> (sans =), - est inutile, car <% %> et <% -%> sont les mêmes. <% %> supprime la ligne courante, si elle ne contient que des espaces, et de ne rien sinon.
    • en <%= -%> (avec =):
      • supprimer la totalité de la ligne si elle ne contient que des espaces
      • autre chose, si il y a un non-espace avant la balise, et seulement whitesapces après, retirez le whitespces qui viennent après
      • autre chose, il est un non-espace après la balise: ne rien faire

    Oui: - n'choses différentes avec = et sans =.

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

Ce %- n'est:

  • ERB: supprimer les espaces avant de balise et d'après les retours à la ligne, mais seulement si il y a seulement des espaces avant.

  • erubis: Cet opérateur n'est jamais utile dans erubis depuis <%- %> est le même que <% %> (sans =), et ce ne peut pas être utilisé avec = qui est le seul cas où la -% peut être utile. Donc, ne jamais utiliser cela.

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 %- et -% faire ensemble

La combinaison de ces deux effets séparément.


Merci de m'avertir si j'ai eu quelque chose de mal: les docs ne sont pas très claires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X