ruby-on-rails - name - rails form_with method




Qual é a diferença entre<%,<%=,<%#e-%> no ERB no Rails? (5)

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

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

qual é o uso de cada um deles?



O Rails não usa o ERB do stdlib por padrão, ele usa o erubis . Fontes: github.com/rails/rails/issues/16766#issuecomment-54148778 , o 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 'erubis'

Quando você pode usar -

  • ERB: você deve passar - para a opção ERB.new do ERB.new para usá-lo.
  • erubis: 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
Erubis::Eruby.new("<%= 'a' -%>  \n b").result == 'a b' or raise

O que -% faz:

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

  • erubis:

    • 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 vêm depois
      • mais, há um não-espaço após a tag: não fazer nada

Exemplos:

# 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

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.

  • erubis: 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\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

O que %- e -% fazem juntos

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


<% %> 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/classes/ActionView/Base.html


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 :-

<h1>Names of all the people</h1>
<% @people.each do |person| %>
  Name: <%= person.name %><br>
<% end %>

<% =%>: -

use para exibir o conteúdo.

Name: <%= person.name %><br>

<% -%>: -

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






erb