Raylarda html.erb şablonlarındaki yorumları engelle


120

Ruby koduyla karıştırılmış html'yi nasıl yorumlarsınız?

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

Jsp'de çok basit: <%-- ... --%>ama raylarda kısa ve öz bir seçenek bulamıyorum.

Basit html açıklamaları <!-- ... -->çalışmıyor: Ruby kodu hala yürütülüyor ve hata veriyor.

if falseHtml yorumlarıyla kullanma seçeneği var , ancak oldukça ayrıntılı, IDE'lerin bunu desteklemediğinden bahsetmiyorum bile.

Şaşırtıcı bir şekilde çalışan saf yakuttan gelen bir seçenek de var.

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

Genelde iyidir, ancak ayrıntılı, tuhaf görünmesi ve bunu desteklediğini bildiğim Ruby IDE'lerinin hiçbiri (evet, tek bir tuşa basarak yorum yapmayı / yorum yapmayı severim).

Merak ediyorum, bunu raylarda yapmanın herhangi bir 'resmi' var mı?

Teşekkürler!

Yanıtlar:


115

Bir çözüm olarak saymazdım, ama belki de

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

veya biraz kirli hissediyorsanız, hiçbir şey vermeyen bir yardımcı yaratın.

Hiç ihtiyacım olmadı, ancak bunun için kullanıma hazır bir çözüm yok gibi göründüğüm için tökezledim.


@Chloe Neden yorumunu bana yönelttiğinden tam emin değilim ama oldukça haklısın <%= false %>işe yaramaz. Sağlanan çözümü <% if false %>= işareti olmadan çalışacak olsa da denemelisiniz
jamesc

@jamesc Cevabımı görmeden önce yorumunuz silindi. Kullanmak istediğin yerden birisi yorumunu sildi <%# if false %>.
Chloe

162

Bunu tek satırları yorumlamak için kullanın:

<%# your_ruby_code %>

Birden çok hat için

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

Söylediğin şey işe yarayacak.


2
Daha basit bir şey varsa ilgilenirim :)
Nikita Rybak

2
= başla Bence başlangıç ​​- son hepsi olur = bitiş # Yorumumu tamamen yorumladığı için görmezden gelebilirsin: P
Garfield

3
eğer = cevapta olduğu gibi yeni satırın başlangıcındaysa çalışır
dhaval

ya bu <% =%> ise? Eşittir - eşittir işaretinden önce mi sonra mı?
BKSpurgeon

Hata, çok satırlı kod içeren bir yorum eklemeye çalışıldı. Bunun yerine bir cevap gönderecek.
ViggoV

29

=beginYaklaşım rahatsız edici çünkü:

  1. Tek bir satırdaki karışık HTML ve Ruby (veya sadece HTML) için çalışmaz
  2. Yazmak can sıkıcı

<% if false %>Yaklaşım eserler, tuhaf görünüyor ve koduna doğru niyetleri hakkında bir ipucu görünüyor başkasının vermez ama.

Benim çözümüm aşağıdaki gibidir:

İçinde application_helper.rb, bir yöntem ekleyin, böylece:

def comment
end

Ardından, görünüm şablonunuzda şunu söyleyebilirsiniz:

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

Bu işe yarar çünkü herhangi bir Ruby yöntemi bir blok alabilir, ancak yönteminiz bir yield.


3
Hatta <% comment do%> ... <% comment end%> şeklinde yazabilirsiniz. Bu sözdizimini yüce metne ekledim, böylece gerçek bir yoruma bile benziyor.
Mariano Cavallo

1
Güzel çözüm !! Bir iyileştirme: devre dışı bırakmak için kodu yorumlamak bir tür ignoredisable<% ignore do %>…<% end %>
hack'tir


7

Şablonlardaki blok yorumları için, metin editörüm (Komodo) bu varyasyonu @ Garfield'ın önerisinde en az iğrenç buluyor :

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

6

Erb etiketlerini yorumlamak için açılış etiketinde = işaretinden önce yakut yorum karma sembolünü kullanın

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

Anladığım kadarıyla, çok satırlı bir açıklama çözümü arıyor: Eğer n satırlık bir bloğum varsa, sadece üste ve alta (veya belki bir çift) bir satır ekleyebilmek ve buna sahip olmak istiyorum. iş. Tüm bloğu düzenlemek zorunda kalmak istemiyorum.
dionyziz

6

<% %>Ruby bloğu koymak için kullanabileceğinizden , kesinlikle içine yorum eklemek için kullanılabilir.

Daha basit ve zarif bir çözüm şöyle görünecektir ...

<%
# 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
Bu çalışmıyor. Blok yorumunun içindeki herhangi bir yakut etiketi dış bloğu kapatacaktır.
Hovis Biddle

4

= Başladıktan sonra%> koymanıza gerek yoktur

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

Önceki cevaplardan bazılarına sadece bir ek. = Begin / = end çözümünü en kullanışlı buldum, ancak güzellik uğruna bunu şöyle yazıyorum:

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

Etiketi ile =endkapatmaya veya etiketi açmaya gerek kalmayana kadar her şey göz ardı edildiğinden (daha önceki bir cevapta da belirtilmiştir)=begin%>=end<%

Bunu, bir karışık yakut ve html kodu bloğunu tamamen dışlamak ve <% if false %>çözümün aksine editörümde grileştirmek için en zarif çözüm olarak buldum . Sadece dezavantajı olduğunu =beginve =endçok hattın başlangıç konmalıdır ..


1
Şu hatayı alıyorum: "gömülü belge dosyanın sonuyla buluşuyor"
Kieran Andrews

2

HEREDOC adlı bir yorum kullanın

Artıları:

  • Bunun bir yorum olduğu kendi kendini açıklıyor
  • Erb ve HTML etiketleri için çalışır
  • Ok sözdizimi vurgulamasına sahiptir (uzun bir dize olarak)

Eksileri:

  • Garip 3 satır kapanış sözdizimi
  • Klavye kısayolu yok

Kod:

Açılış etiketi olabilir

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

veya

<%
<<-COMMENT
%>

Buradaki hiçbir şey tarayıcıda çalışmayacak veya görünmeyecek

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

Kapanış etiketi

evet 3 satır olması gerekiyor 😟. Açılan erb etiketinin neden önemli olduğunu bilmiyorum ama önemli! (yorumda herhangi bir erb etiketi kullanmadıysanız).

<%      
COMMENT
%>

1

Kodun nerede çalıştırıldığını aklınızda bulundurmalısınız. Ruby tarzı yorumlar çalışır çünkü Ruby kodu web tarayıcısına sunulmadan önce sunucuda yürütülür. Bu aynı zamanda HTML yorumlarının neden çalışmadığını da açıklar — Ruby zaten çalıştırılmıştır.

Kullandığınız IDE, kod bloklarını yorumlamak için özel makrolar oluşturmayı desteklemiyor mu?


1) haklısınız, jsp yorumlarının biçimi biraz farklı, yazıyı güncelledim. 2) IDEA veya Netbeans'de böyle bir şey bulamıyorum. Aklınızda bunu söyleyen belirli bir IDE var mı?
Nikita Rybak

1
Hayır yapmadım. Şahsen, Rails projeleri için bir IDE kullanmıyorum.
John Topley

1

Sublime Text'in blok yorumu kısayolu, ctrl+shift+/normal HTML veya bir Erb etiketi seçip seçmediğinizi fark eder ve bunlardan birini <!---veya <% =begin %>buna göre yerleştirir.


Evet, ancak bu yine de hem HTML'yi hem de yakutu yorumlamaz .
Adamantish

Hmm ... özel bir eklenti için iyi bir neden gibi geliyor. Belki bir ara nokta olarak , blok içindeki ctrl+dher Erb etiketinin başlangıcını çoklu seçmek için tuşuna basabilir <%ve ardından vurabilir ctrl+shift+/, ardından tüm bloğun HTML'yi yorumlaması için bir kez daha vurabilirsiniz.
iono

1

Hem <% if false%> hem de HTML yorumlarını aynı anda kullanabilirsiniz:

<%if false%><--

stuff to comment out

--><%end%>

Avantajlar:

  • Ruby kodu yürütülmedi

  • Yorum yapılan blok IDE'de gri renge sahiptir

  • Diğer geliştiriciler için niyet açıktır


0

Bu benim için çalışan tek kişi.

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

Umarım aklınızı başınızdan almışımdır!


-4

Bu yıpratıcı soruna bulduğum kabul edilebilir tek çözüm, artık Ruby kodu olarak kaydedilmemesi için "<% =" içine bir boşluk koymak ve ardından tüm bloğu html yorumlarıyla yorumlamaktı.

Bunun gibi:

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

Evet, boşluk eklemek can sıkıcıdır. Ancak şimdiye kadar gördüğüm tüm çözümler arasında en az sinir bozucu olanı.


1
#Belgeye yakut göndermek yerine sadece bir ... ekleyebilirsiniz .
en fazla
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.