Bloquear comentários nos modelos html.erb nos trilhos

119

Como você comenta o html misturado com o código ruby?

some text <% ... %> more text <%= ... %>
something else
<% ... %>

No jsp é bem simples:, <%-- ... --%>mas não consigo encontrar nenhuma opção concisa nos trilhos.

Comentários simples em html <!-- ... -->não funcionam: o código ruby ​​ainda é executado e grita erros.

Há uma opção para usar if falsecom comentários html, mas é bem detalhado, sem mencionar que os IDEs não suportam isso.

Há também uma opção vinda do rubi puro, que surpreendentemente funciona.

<%
=begin %>
... html and ruby code goes here
<%
=end %>

Geralmente é bom, exceto que é detalhado, de aparência estranha e nenhum dos IDEs em rubi que eu conheço (sim, eu gosto de comentar / comentar com um toque de tecla).

Estou curioso, existe algum 'oficial' de fazer isso nos trilhos?

Obrigado!

Nikita Rybak
fonte

Respostas:

115

Eu não contaria como uma solução, mas talvez colocando o pedaço entre um

<% if false %>
   ...
<% end %>

ou se você se sentir um pouco sujo, crie um ajudante que simplesmente não produza nada.

Eu nunca precisei disso, mas me deparei que parece não haver uma solução pronta para isso.

Chubas
fonte
@ Chloe Não sei ao certo por que você direcionou seu comentário para mim, mas está certo de <%= false %>que não funcionaria. Você deve tentar a solução fornecida, que funcionaria <% if false %>sem o sinal =
jamesc 14/02
@jamesc Seu comentário foi excluído antes de você ver minha resposta. Alguém excluiu seu comentário onde você disse usar <%# if false %>.
Chloe
162

Use isso para comentar linhas simples:

<%# your_ruby_code %>

Para várias linhas, o

<% 
=begin %>  <% ruby_code %>
<% 
=end %>

O que você disse funcionaria.

Garfield
fonte
2
Eu sei que seria, eu estou interessado em saber se há alguma coisa mais simples :)
Nikita Rybak
2
= begin Eu acho que o começo - fim seria tudo = end # Você pode ignorar o meu comentário como totalmente comentado: P
Garfield
3
ele funciona if = é no início da nova linha apenas como na resposta
dhaval
e se for assim <% =%>? Para onde iria o hash - antes ou depois do sinal de igual?
BKSpurgeon
Ops, tentei adicionar um comentário com código de várias linhas. Em vez disso, postará uma resposta.
ViggoV
29

A =beginabordagem é irritante porque:

  1. Não funciona para HTML misto e Ruby (ou apenas HTML) em uma única linha
  2. É chato digitar

A <% if false %>abordagem funciona, mas parece estranha e não dá a ninguém que olha para o seu código uma dica sobre suas intenções.

Minha solução é a seguinte:

Em application_helper.rb, adicione um método para:

def comment
end

Em seguida, no seu modelo de visualização, você pode dizer:

<% comment do %>Some stuff that won't be rendered...<% end %>

Isso funciona porque qualquer método Ruby pode aceitar um bloco, mas ignorará silenciosamente o bloco passado se o seu método não incluir a yield.

sumizome
fonte
3
Você pode até escrever como <% comment do%> ... <% comment end%>. Adicionei essa sintaxe ao texto sublime, para que pareça um comentário real.
Mariano Cavallo
1
Adorável solução !! Uma melhoria: comentando código para desativar é uma espécie de um truque, assim, em vez chamar o método ignoreou disablee nós temos uma solução totalmente semântica:<% ignore do %>…<% end %>
tanius
12
<%#=

...commented
multiline
block...

%>
Piotr Turek
fonte
1
Esta resposta deve ter muito mais interesse.
Ulysse BN
7

Para comentários em bloco nos modelos, meu editor de texto (Komodo) considera esta variação na recomendação de @ Garfield menos desagradável:

<%# A long multiline comment in a rails template ...
  # line 2
  # and so on ... 
  # %>
klenwell
fonte
6

Para comentar as tags erb, use o símbolo de hash do comentário ruby ​​antes do sinal = na tag de abertura

<p>
 This is some text I want to keep
 <%= @some_object.some_attribute %>
</p>
<p>
  I want to keep this text but comment out the erb tag
  <%#= @some_object.another_attribute %>
</p>
<!--
<p>
  I want all of this text commented out including the erb tag
  <%#= @some_object.some_attribute %>
</p>
-->
<!--
<p>
 I just want this html commented out but I want to keep the erb tag
 <%= @some_object.some_attribute %>
</p>
-->
jamesw
fonte
Pelo que entendi, ele está procurando uma solução de comentário multilinha: se eu tiver um bloco de n linhas, só quero poder adicionar uma linha na parte superior e inferior (ou talvez algumas) e tê-la trabalhos. Eu não quero ter que editar o bloco inteiro.
dionyziz
6

Como você pode usar <% %>para colocar um bloco de rubi, ele certamente pode ser usado para colocar comentários nele.

Uma solução mais simples e elegante seria semelhante a ...

<%
# See! I am a Ruby Comment
# And I am multi-line
# I look like a recognizable ruby comment block too
# and not so complex
# The only drawback with me is the Hash symbol you have to repeat
# But it's the norm, isn't it?
%>
Sagar Ranglani
fonte
6
Isso não funciona. Qualquer tag rubi dentro do comentário do bloco fechará o bloco externo.
Hovis Biddle
4

Depois de = begin, você não precisa colocar%>

<%
=begin

code code code code code code 
code code code code code code 
code code code code code code 
code code code code code code 

=end %>
Michal
fonte
2

Apenas um adendo para algumas das respostas anteriores. Eu achei a solução = begin / = end mais útil, mas por uma questão de beleza, eu a escrevo assim:

<%
=begin
  <p>HTML will be ignored</p>
  <%= 'and so will ruby' %>
  <p>
    <%= 'plus the whole block will be greyed in editor' %>
  </p>
=end
%>

Note-se que uma vez que tudo é ignorado até que o =endnão há nenhuma necessidade de fechar a =begintag com %>ou abrir o =endtag com <%(que também tem sido apontado numa resposta anterior)

Eu achei que essa era a solução mais elegante para complementar completamente um bloco de código misto de ruby ​​e html e tê-lo acinzentado também no meu editor, em oposição à <% if false %>solução. A única desvantagem é essa =begine =enddeve ser colocada no início da linha.

ViggoV
fonte
1
Estou recebendo este erro: "documento incorporado atende ao final do arquivo"
Kieran Andrews
2

Use um comentário chamado HEREDOC

Prós:

  • Autoexplicativo de que este é um comentário
  • Funciona para tags erb e HTML
  • Possui destaque de sintaxe ok (como uma sequência longa)

Contras:

  • Sintaxe estranha de fechamento de 3 linhas
  • Sem atalhos de teclado

Código:

A tag de abertura pode ser

<% <<-COMMENT %>

the above closing erb tag is just for looks (to match the end),
but don't put anything else there, it may show up on the page

ou

<%
<<-COMMENT
%>

Qualquer coisa aqui não será exibida ou exibida no navegador

<P>
    this will not be displayed in the browser
    <strong> even in the developer's tools </strong>
</p>

<% 1_000_000_000_000.times do |count| %>

for the <%= count %>'th time, this won't run a trillion times,
this is all just a string

all of these %>, <%, <% end %>, end, do, <!--, won't cause any issues.

but the below opening erb tag is important (if you used any erb tags in the comment).
I have no clue why?

A tag de fechamento

sim, ele precisa ter 3 linhas 😟. Não sei por que a tag erb de abertura é importante, mas é! (a menos que você não tenha usado tags erb no comentário).

<%      
COMMENT
%>
Arye Dov Eidelman
fonte
1

Você deve ter em mente onde o código é executado. Comentários no estilo Ruby funcionam porque o código Ruby é executado no servidor antes de ser veiculado no navegador da web. Isso também explica por que os comentários HTML não funcionam - o Ruby já foi executado.

O IDE que você está usando não oferece suporte à criação de macros personalizadas para comentar blocos de código?

John Topley
fonte
1) você está certo, os comentários do jsp têm um formato ligeiramente diferente, atualizei o post. 2) Não consigo encontrar nada parecido no IDEA ou no Netbeans. Você tinha alguma IDE em mente dizendo isso?
Nikita Rybak
1
Não, eu não fiz. Pessoalmente, não uso um IDE para projetos Rails.
precisa
1

O atalho de comentário em bloco do Sublime Text ctrl+shift+/percebe se você selecionou HTML normal ou uma tag Erb e coloca o <!---ou de <% =begin %>acordo.

iono
fonte
Sim, mas isso ainda não comenta o HTML e o ruby.
Adamantish
Hmm ... parece uma boa causa para um plugin personalizado. Talvez como um paliativo, você pode pressionar ctrl+dpara selecionar várias vezes o início de cada tag Erb <%dentro do bloco e pressionar e ctrl+shift+/, em seguida, pressionar novamente para que todo o bloco comente o HTML.
iono 28/10
1

Você pode usar os comentários <% if false%> e HTML ao mesmo tempo:

<%if false%><--

stuff to comment out

--><%end%>

Os benefícios são:

  • Código Ruby não é executado

  • O bloco comentado tem cor cinza no IDE

  • A intenção é óbvia para outros desenvolvedores

ainda esperando
fonte
0

Este é o único que funcionou para mim.

<%
=begin %>

code code code code code code 
code code code code code code 
code code code code code code 
code code code code code code 

=end %>

Platon
fonte
0
<% %w(
  <span title="<%= title %>">hello</span>
) %>

Espero ter acabado de explodir sua mente!

DTrejo
fonte
-4

A única solução aceitável que eu já encontrei para esse problema de última hora foi colocar um espaço dentro do "<% =" para deixar de ser registrado como código ruby ​​e, em seguida, comentar o bloco inteiro com comentários html

Como isso:

<!--
<p>
  < %= @some_object.some_attribute %>
</p>
<p>
  < %= @some_object.another_attribute %>
</p>
<p>
  < %= @some_object.some_attribute %>
</p>
<p>
  < %= @some_object.some_attribute %>
</p>
-->

Sim, adicionar espaços é irritante. Mas é a menos chata de todas as soluções que eu já vi.

eu preciso de um herói
fonte
1
Você também pode adicionar um #... em vez de enviar ruby ​​no documento.
Max