Qual é a diferença entre <%, <% =, no ERB no Rails?

Alguém pode por favor descrever o uso dos seguintes caracteres que é usado no arquivo ERB:

    

qual é o uso de cada um deles?

 <% %> 

Executa o código ruby ​​entre os parênteses.

 <%= %> 

Imprime algo em um arquivo erb.

 <% -%> 

Evita a quebra de linha após a expressão.

 <%# %> 

Comentários fora do código entre parênteses; não enviado ao cliente (em oposição a comentários HTML).

Visite o Ruby Doc para mais informações sobre o ERB.

<% %> e <%- and -%> são para qualquer código Ruby, mas não produzem os resultados (por exemplo, se instruções). os dois são iguais.

<%= %> é para gerar os resultados do código Ruby

<%# %> é um comentário do ERB

Aqui está um bom guia: http://api.rubyonrails.org/classs/ActionView/Base.html

O Rails não usa o ERB do stdlib por padrão, ele usa o erubys . Fontes: este comentário do desenvolvedor , gemspec do ActionView , aceitou o pedido de mesclagem que eu fiz enquanto escrevia isso .

Existem diferenças de comportamento entre eles, em particular sobre como os operadores de hífen %- e -% trabalham.

Documentação é escassa, onde o formato ERB do Ruby é “oficialmente” definido? Então, o que segue são conclusões empíricas.

Todos os testes supõem:

 require 'erb' require 'erubys' 

Quando você pode usar -

  • ERB: você deve passar - para a opção ERB.new do ERB.new para usá-lo.
  • erubys: ativado por padrão.

Exemplos:

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

O que -% faz:

  • ERB: remova o próximo caractere se for uma nova linha.

  • erubys:

    • em <% %> (sem = ), - é inútil porque <% %> e <% -%> são os mesmos. <% %> %% <% %> remove a linha atual se ela contiver apenas espaços em branco e não faz nada de outra forma.

    • em <%= -%> (com = ):

      • remova a linha inteira se ela contiver apenas espaços em branco
      • senão, se houver um não-espaço antes da tag e somente whitesapces after, remova as whitespces que vierem depois
      • mais, há um não-espaço após a tag: não fazer nada

Exemplos:

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

O que %- faz:

  • ERB: remova os espaços em branco antes da tag e depois das novas linhas anteriores, mas somente se houver apenas espaços em branco antes.

  • erubys: inútil porque <%- %> é o mesmo que <% %> %% <% %> (sem = ), e isso não pode ser usado com = que é o único caso em que -% pode ser útil. Então nunca use isso.

Exemplos:

 # 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 

O que %- e -% fazem juntos

A combinação exata de ambos os efeitos separadamente.

Eu adicionei o delimitador de tag <%% literal como uma resposta para isso por causa de sua obscuridade. Isto irá dizer para não interpretar a <% parte da tag que é necessária para os aplicativos js, como exibir as dicas de ferramentas do chart.js etc.

Tudo sobre o ERB pode ser encontrado aqui: https://docs.puppet.com/puppet/latest/reference/lang_template_erb.html#tags

Estes são usados ​​em ruby ​​on rails : –

<%%>: –

As tags <%%> são usadas para executar código Ruby que não retorna nada, como condições, loops ou blocos. Por exemplo :-

 

Names of all the people

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

<% =%>: –

use para exibir o conteúdo.

 Name: <%= person.name %>

<% -%>: –

O Rails estende o ERB, para que você possa suprimir a nova linha simplesmente adicionando um hífen final às tags nos modelos Rails

<% #%>: –

comente o código

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

<% %> %% <% %> executa o código lá, mas não imprime o resultado, por exemplo:
Podemos usá-lo para mais de um arquivo erb.

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

Vai imprimir temp is 1


<%= %> executa o código e também imprime a saída, por exemplo:
Podemos imprimir o valor de uma variável de rails.

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

Vai imprimir 1


<% -%> Não faz diferença, pois não imprime nada, -%> só faz sentido com <%= -%> , isso evitará uma nova linha.


<%# %> irá comentar o código escrito dentro disto.

  • <% %> %% <% %> : Executa o código ruby
  • <%= %> : Imprime no arquivo Erb. Ou navegador
  • <% -%> : evita quebra de linha após a expressão.
  • <%# %> : Comentário do ERB