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