Rails n'utilise pas l' ERB de stdlib par défaut, il utilise erubis . Sources: le commentaire de ce développeur , gemspec d'ActionView , accepté la demande de fusion que j'ai faite en écrivant ceci .
Il existe des différences de comportement entre eux, en particulier sur la façon dont les opérateurs de trait d'union %-
et -%
fonctionnent.
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 pouvez-vous utiliser -
- ERB: vous devez passer
-
à l' 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
Qu'est -%
- ce que:
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
Qu'est %-
- ce que:
ERB: supprimer les espaces blancs avant la balise et après les sauts de ligne précédents, mais uniquement s'il n'y a que des espaces blancs avant.
erubis: inutile parce que <%- %>
c'est la même chose que <% %>
(sans =
), et cela ne peut pas être utilisé avec =
qui est le seul cas où cela -%
peut être utile. Alors n'utilisez jamais ça.
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
Que faire %-
et -%
faire ensemble
La combinaison exacte des deux effets séparément.