Blocca i commenti nei modelli html.erb in rails


120

Come commentate l'html mescolato con il codice ruby?

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

In jsp è davvero semplice:, <%-- ... --%>ma non riesco a trovare alcuna opzione concisa in rails.

I semplici commenti html <!-- ... -->non funzionano: il codice ruby ​​viene comunque eseguito e grida errori.

C'è un'opzione da usare if falsecon i commenti html, ma è piuttosto prolissa, per non parlare degli IDE che non la supportano.

C'è anche un'opzione proveniente dal rubino puro, che sorprendentemente funziona.

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

In generale va bene, tranne per il fatto che è prolisso, dall'aspetto strano e nessuno degli IDE ruby ​​che conosco lo supporta (sì, mi piace commentare / commentare con un solo tasto).

Sono curioso, c'è qualche "ufficiale" per farlo su rails?

Grazie!

Risposte:


115

Non considererei una soluzione, ma forse racchiudere il pezzo tra un file

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

o se ti senti un po 'sporco, crea un assistente che semplicemente non restituisce nulla.

Non ne ho mai avuto bisogno, ma sono inciampato che non sembra esserci una soluzione pronta all'uso per questo.


@Chloe Non sono del tutto sicuro del motivo per cui mi hai indirizzato il tuo commento, ma hai ragione <%= false %>non funzionerebbe. Dovresti provare la soluzione fornita che funzionerebbe <% if false %>senza il segno =
jamesc

@jamesc Il tuo commento è stato cancellato prima che tu vedessi la mia risposta. Qualcuno ha cancellato il tuo commento dove avevi detto di usare <%# if false %>.
Chloe,

162

Usa questo per commentare singole righe:

<%# your_ruby_code %>

Per più righe, il

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

Quello che hai detto avrebbe funzionato.


2
Lo so, mi interessa se c'è qualcosa di più semplice :)
Nikita Rybak,

2
= inizio Penso che l'inizio - fine sarebbe tutto = fine # Puoi ignorare il mio commento poiché è interamente commentato: P
Garfield,

3
funziona se = è all'inizio di una nuova riga proprio come nella risposta
dhaval

e se fosse così <% =%>? Dove andrebbe a finire l'hash - prima o dopo il segno di uguale?
BKSpurgeon

Oops, ho provato ad aggiungere un commento con codice multilinea. Pubblicherò invece una risposta.
ViggoV

29

L' =beginapproccio è fastidioso perché:

  1. Non funziona per HTML misto e Ruby (o solo HTML) su una singola riga
  2. È fastidioso digitare

L' <% if false %>approccio funziona, ma sembra strano e non dà a nessun altro che guarda il tuo codice un suggerimento sulle tue intenzioni.

La mia soluzione è la seguente:

In application_helper.rb, aggiungi un metodo così:

def comment
end

Quindi nel tuo modello di visualizzazione, puoi dire:

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

Questo funziona perché qualsiasi metodo Ruby può accettare un blocco, ma ignorerà silenziosamente il blocco passato se il tuo metodo non include un file yield.


3
Puoi anche scriverlo come <% comment do%> ... <% comment end%>. Ho aggiunto questa sintassi al testo sublime in modo che sembri anche un vero commento.
Mariano Cavallo

1
Bella soluzione !! Un miglioramento: commentare il codice per disabilitarlo è una specie di hack, quindi chiama piuttosto il metodo ignoreo disablee otteniamo una soluzione completamente semantica:<% ignore do %>…<% end %>
tanius


7

Per i commenti di blocco nei modelli, il mio editor di testo (Komodo) trova questa variazione sulla raccomandazione di @ Garfield meno fastidiosa:

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

6

Per commentare i tag erb usa il simbolo hash del commento ruby ​​prima del segno = nel tag di apertura

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

Per quanto ho capito, sta cercando una soluzione di commento su più righe: se ho un blocco di n righe, voglio solo essere in grado di aggiungere una riga in alto e in basso (o forse un paio) e averlo lavoro. Non voglio dover modificare l'intero blocco.
dionyziz

6

Dato che puoi usare <% %>per mettere un blocco rubino, può certamente essere usato per inserire commenti al suo interno.

Una soluzione più semplice ed elegante sembrerebbe ...

<%
# 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?
%>

6
Questo non funziona. Qualsiasi tag ruby ​​all'interno del commento del blocco chiuderà il blocco esterno.
Hovis Biddle

4

Dopo = inizio non è necessario inserire%>

<%
=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 %>

2

Solo un addendum ad alcune delle risposte precedenti. Ho trovato la soluzione = begin / = end molto utile, ma per motivi di bellezza la scrivo così:

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

Si noti che poiché tutto viene ignorato fino a quando =endnon è necessario chiudere il =begintag con %>o aprire il =endtag con <%(che è stato anche sottolineato in una risposta precedente)

Ho trovato che questa è la soluzione più elegante per superare completamente un blocco di codice rubino e html misto e averlo disattivato anche nel mio editor, al contrario della <% if false %>soluzione. L'unico inconveniente è che =begine =enddeve essere posizionato all'inizio della riga ..


1
Ricevo questo errore: "il documento incorporato incontra la fine del file"
Kieran Andrews

2

Usa un HEREDOC chiamato commento

Professionisti:

  • Si spiega da sé che questo è un commento
  • Funziona per tag erb e HTML
  • Ha l'evidenziazione della sintassi ok (come una lunga stringa)

Contro:

  • Strana sintassi di chiusura di 3 righe
  • Nessuna scorciatoia da tastiera

Codice:

Il tag di apertura può essere

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

o

<%
<<-COMMENT
%>

Qualunque cosa qui non verrà eseguita o mostrata nel browser

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

Il tag di chiusura

sì, devono essere 3 righe 😟. Non so perché il tag erb di apertura sia importante ma lo è! (a meno che tu non abbia usato alcun tag erb nel commento).

<%      
COMMENT
%>

1

Devi tenere a mente dove viene eseguito il codice. I commenti in stile Ruby funzionano perché il codice Ruby viene eseguito sul server prima di essere servito al browser web. Questo spiega anche perché i commenti HTML non funzionano: il Ruby è già stato eseguito.

L'IDE che stai utilizzando non supporta la creazione di macro personalizzate per commentare blocchi di codice?


1) hai ragione, i commenti jsp hanno formato leggermente diverso, ho aggiornato il post. 2) Non riesco a trovare niente di simile in IDEA o Netbeans. Avevi in ​​mente qualche IDE particolare per dirlo?
Nikita Rybak,

1
No, non l'ho fatto. Personalmente, non utilizzo un IDE per i progetti Rails.
John Topley,

1

La scorciatoia di commento del blocco di Sublime Text ctrl+shift+/rileva se hai selezionato HTML normale o un tag Erb e inserisce <!---o di <% =begin %>conseguenza.


Sì, ma questo ancora non commenterà né l'HTML il ruby.
Adamantish

Hmm ... sembra una buona causa per un plugin personalizzato. Forse come ripiego, puoi premere ctrl+dper selezionare più volte l'inizio di ogni tag Erb <%all'interno del blocco e poi premerlo, quindi premerlo ctrl+shift+/ancora una volta per l'intero blocco per commentare l'HTML.
iono

1

Puoi utilizzare contemporaneamente <% if false%> e commenti HTML:

<%if false%><--

stuff to comment out

--><%end%>

I vantaggi sono:

  • Il codice Ruby non viene eseguito

  • Il blocco commentato ha il colore grigio in IDE

  • L'intenzione è ovvia per altri sviluppatori


0

Questo è l'unico che ha funzionato per me.

<%
=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 %>


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

Spero di averti appena sbalordito!


-4

L'unica soluzione accettabile che abbia mai trovato a questo problema di rottura è stata quella di inserire uno spazio all'interno di "<% =" per non registrarlo più come codice ruby, quindi commentare l'intero blocco con commenti html

Come questo:

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

Sì, aggiungere gli spazi è fastidioso. Ma è la meno fastidiosa di tutte le soluzioni che ho visto finora.


1
Potresti anche aggiungere un #... invece di inviare ruby ​​nel documento.
max
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.