Blokir komentar di template html.erb di rails

120

Bagaimana Anda mengomentari html yang dicampur dengan kode ruby?

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

Dalam jsp itu sangat sederhana:, <%-- ... --%>tetapi saya tidak dapat menemukan opsi ringkas apa pun di rel.

Komentar html sederhana <!-- ... -->tidak berfungsi: kode ruby ​​masih dijalankan dan berteriak kesalahan.

Ada opsi untuk digunakan if falsedengan komentar html, tetapi cukup bertele-tele, belum lagi IDE tidak mendukungnya.

Ada juga opsi yang berasal dari ruby ​​murni, yang secara mengejutkan berfungsi.

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

Secara umum baik-baik saja, kecuali bahwa itu bertele-tele, tampak aneh dan tidak ada IDE ruby ​​yang saya tahu mendukungnya (ya, saya suka berkomentar / berkomentar dengan satu penekanan tombol).

Saya penasaran, apakah ada 'resmi' yang melakukan ini di rel?

Terima kasih!

Nikita Rybak
sumber

Jawaban:

115

Saya tidak akan dihitung sebagai solusi, tapi mungkin melampirkan potongan di antara file

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

atau jika Anda merasa sedikit kotor, buat penolong yang tidak menghasilkan apa-apa.

Saya tidak pernah membutuhkannya, tetapi saya tersandung karena sepertinya tidak ada solusi out-of-the-box untuk ini.

Chubas
sumber
@Chloe Tidak begitu yakin mengapa Anda mengarahkan komentar Anda kepada saya tetapi Anda cukup benar <%= false %>tidak akan berhasil. Anda harus mencoba solusi yang disediakan yang akan bekerja <% if false %>tanpa tanda =
jamesc
@jamesc Komentar Anda telah dihapus sebelum Anda melihat tanggapan saya. Seseorang menghapus komentar Anda di tempat yang Anda katakan akan digunakan <%# if false %>.
Chloe
162

Gunakan ini untuk mengomentari baris tunggal:

<%# your_ruby_code %>

Untuk beberapa baris,

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

Apa yang Anda katakan akan berhasil.

Garfield
sumber
2
Saya tahu itu akan terjadi, saya tertarik jika ada yang lebih sederhana :)
Nikita Rybak
2
= mulai Saya pikir awal - akhir akan menjadi semua = akhir # Anda dapat mengabaikan komentar saya karena sepenuhnya dikomentari: P
Garfield
3
Ini berfungsi jika = ada di awal baris baru seperti dalam jawaban
dhaval
bagaimana jika seperti ini <% =%>? Kemana tujuan hash - sebelum atau sesudah tanda sama dengan?
BKSpurgeon
Ups, coba tambahkan komentar dengan kode multiline. Akan memposting jawaban sebagai gantinya.
ViggoV
29

The =beginPendekatan ini karena mengganggu:

  1. Ini tidak berfungsi untuk HTML campuran dan Ruby (atau hanya HTML) yang berada dalam satu baris
  2. Mengetik itu menyebalkan

The <% if false %>pendekatan bekerja, tapi itu terlihat aneh dan tidak memberikan orang lain yang melihat kode Anda petunjuk tentang niat Anda.

Solusi saya adalah sebagai berikut:

Di application_helper.rb, tambahkan metode jadi:

def comment
end

Kemudian di template tampilan Anda, Anda dapat mengatakan:

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

Ini berfungsi karena metode Ruby apa pun dapat mengambil blok, tetapi diam-diam akan mengabaikan blok yang diteruskan jika metode Anda tidak menyertakan file yield.

sumizome
sumber
3
Anda bahkan dapat menuliskannya sebagai <% comment do%> ... <% comment end%>. Saya telah menambahkan sintaks ini ke teks sublim sehingga terlihat seperti komentar asli.
Mariano Cavallo
1
Solusi yang bagus !! Satu perbaikan: mengomentari kode untuk menonaktifkannya adalah semacam peretasan, jadi lebih baik panggil metode ignoreatau disabledan kami mendapatkan solusi semantik sepenuhnya:<% ignore do %>…<% end %>
tanius
12
<%#=

...commented
multiline
block...

%>
Piotr Turek
sumber
1
Jawaban ini seharusnya lebih menarik.
Ulysse BN
7

Untuk blok komentar di template, editor teks saya (Komodo) menganggap variasi pada rekomendasi @ Garfield ini paling tidak menjengkelkan:

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

Untuk mengomentari tag erb gunakan simbol hash komentar ruby ​​sebelum tanda = di tag pembuka

<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
sumber
Sejauh yang saya mengerti, dia mencari solusi komentar-keluar multiline: Jika saya memiliki blok n baris, saya hanya ingin dapat menambahkan baris di atas dan bawah (atau mungkin beberapa) dan memilikinya kerja. Saya tidak ingin harus mengedit seluruh blok.
dionyziz
6

Karena Anda dapat menggunakan <% %>untuk meletakkan blok ruby, itu pasti dapat digunakan untuk memasukkan komentar ke dalamnya.

Solusi yang lebih sederhana dan elegan akan terlihat seperti ...

<%
# 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
sumber
6
Ini tidak berhasil. Setiap tag ruby ​​di dalam komentar blok akan menutup blok luar.
Hovis Biddle
4

Setelah = mulai Anda tidak perlu meletakkan%>

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

Hanya tambahan dari beberapa jawaban sebelumnya. Saya menemukan solusi = begin / = end paling berguna, tetapi demi keindahan saya menulisnya seperti ini:

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

Perhatikan bahwa karena semuanya diabaikan hingga =endtidak perlu menutup =begintag dengan %>atau membuka =endtag dengan<% (yang juga telah ditunjukkan dalam jawaban sebelumnya)

Saya menemukan ini sebagai solusi paling elegan untuk sepenuhnya mengatasi blok kode ruby ​​dan html campuran dan membuatnya berwarna abu-abu di editor saya juga, sebagai lawan dari <% if false %>solusinya. Satu-satunya kelemahan adalah itu =begindan =endharus ditempatkan di awal baris ..

ViggoV
sumber
1
Saya mendapatkan kesalahan ini: "dokumen tertanam memenuhi akhir file"
Kieran Andrews
2

Gunakan komentar yang disebut HEREDOC

Kelebihan:

  • Cukup jelas bahwa ini adalah komentar
  • Bekerja untuk tag erb dan HTML
  • Memiliki penyorotan sintaks yang baik (sebagai satu string panjang)

Kekurangan:

  • Sintaks penutupan 3 baris yang aneh
  • Tidak ada pintasan keyboard

Kode:

Tag pembuka bisa

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

atau

<%
<<-COMMENT
%>

Apa pun di sini tidak akan berjalan atau muncul di 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?

Tag penutup

ya itu perlu 3 baris 😟. Saya tidak tahu mengapa tag erb pembuka itu penting, tetapi itu penting! (kecuali jika Anda tidak menggunakan tag erb apa pun dalam komentar).

<%      
COMMENT
%>
Arye Dov Eidelman
sumber
1

Anda harus ingat di mana kode dijalankan. Komentar bergaya Ruby berfungsi karena kode Ruby dijalankan di server sebelum disajikan ke browser web. Ini juga menjelaskan mengapa komentar HTML tidak berfungsi — Ruby telah dijalankan.

Bukankah IDE yang Anda gunakan mendukung pembuatan makro khusus untuk mengomentari blok kode?

John Topley
sumber
1) Anda benar, komentar jsp memiliki format yang sedikit berbeda, saya memperbarui posting. 2) Saya tidak dapat menemukan hal seperti itu di IDEA atau Netbeans. Apakah Anda memiliki ide tertentu yang ingin Anda sampaikan?
Nikita Rybak
1
Tidak, aku tidak. Secara pribadi, saya tidak menggunakan IDE untuk proyek Rails.
John Topley
1

Pintasan komentar blokir Sublime Text ctrl+shift+/memperhatikan apakah Anda telah memilih HTML normal atau tag Erb dan meletakkan <!---atau <% =begin %>sesuai.

iono
sumber
Ya, tapi ini tetap tidak akan mengomentari HTML dan ruby.
Adamantish
Hmm ... sepertinya alasan bagus untuk plugin kustom. Mungkin sebagai stopgap, Anda dapat menekan ctrl+duntuk memilih banyak awal dari setiap tag Erb <%di dalam blok dan kemudian tekan ctrl+shift+/, lalu tekan sekali lagi untuk seluruh blok untuk mengomentari HTML.
iono
1

Anda dapat menggunakan <% if false%> dan komentar HTML secara bersamaan:

<%if false%><--

stuff to comment out

--><%end%>

Manfaatnya adalah:

  • Kode Ruby tidak dijalankan

  • Blok yang dikomentari memiliki warna abu-abu di IDE

  • Niatnya jelas bagi pengembang lain

masih menunggu
sumber
0

Ini adalah satu-satunya yang berhasil untuk saya.

<%
=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
sumber
0
<% %w(
  <span title="<%= title %>">hello</span>
) %>

Saya harap saya baru saja membuat Anda terpana!

DTrejo
sumber
-4

Satu-satunya solusi yang dapat diterima yang pernah saya temukan untuk masalah yang merusak punggung ini adalah dengan menempatkan spasi di dalam "<% =" agar tidak lagi terdaftar sebagai kode ruby, dan kemudian mengomentari seluruh blok dengan komentar html

Seperti ini:

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

Ya, menambahkan spasi itu mengganggu. Tapi itu yang paling tidak mengganggu dari semua solusi yang pernah saya lihat.

aku butuh seorang pahlawan
sumber
1
Anda mungkin juga menambahkan #... daripada mengirim ruby ​​ke dalam dokumen.
maks