บล็อกความคิดเห็นในเทมเพลต html.erb ในราง


120

คุณคิดเห็นอย่างไรกับ html ผสมกับรหัสทับทิม?

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

ใน jsp มันง่าย<%-- ... --%>มาก แต่ฉันไม่พบตัวเลือกที่กระชับในราง

ความคิดเห็น html แบบธรรมดา<!-- ... -->ไม่ทำงาน: รหัสทับทิมยังคงถูกเรียกใช้และมีข้อผิดพลาด

มีตัวเลือกให้ใช้if falseกับความคิดเห็นแบบ html แต่ค่อนข้างละเอียดไม่ต้องพูดถึง IDE ไม่รองรับ

นอกจากนี้ยังมีตัวเลือกที่มาจากทับทิมบริสุทธิ์ซึ่งได้ผลอย่างน่าประหลาดใจ

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

โดยทั่วไปแล้วมันใช้ได้ดียกเว้นว่ามันเป็นแบบ verbose ดูแปลก ๆ และไม่มี Ruby IDE ที่ฉันรู้ว่ารองรับ (ใช่ฉันชอบแสดงความคิดเห็น / แสดงความคิดเห็นด้วยการกดแป้นพิมพ์ครั้งเดียว)

ฉันอยากรู้ว่ามี 'ทางการ' ทำสิ่งนี้ในรางหรือไม่?

ขอบคุณ!

คำตอบ:


115

ฉันจะไม่นับว่าเป็นวิธีแก้ปัญหา แต่อาจจะรวมส่วนระหว่างไฟล์

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

หรือถ้าคุณรู้สึกสกปรกเล็กน้อยให้สร้างตัวช่วยที่ไม่ต้องทำอะไรเลย

ฉันไม่เคยต้องการมัน แต่ฉันสะดุดดูเหมือนว่าจะไม่มีวิธีแก้ปัญหานอกกรอบสำหรับสิ่งนี้


@ Chloe ไม่ค่อยแน่ใจว่าทำไมคุณถึงส่งความคิดเห็นของคุณถึงฉัน แต่คุณค่อนข้างถูกต้อง<%= false %>จะไม่ทำงาน คุณควรลองใช้วิธีแก้ปัญหาที่ให้ไว้แม้ว่าจะใช้งานได้<% if false %>โดยไม่มีเครื่องหมาย =
jamesc

@jamesc ความคิดเห็นของคุณถูกลบก่อนที่คุณจะเห็นคำตอบของฉัน <%# if false %>มีคนลบความคิดเห็นของคุณที่คุณบอกว่าจะใช้
Chloe

163

ใช้สำหรับการแสดงความคิดเห็นบรรทัดเดียว:

<%# your_ruby_code %>

สำหรับหลายบรรทัดไฟล์

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

สิ่งที่คุณพูดจะได้ผล


2
ฉันรู้ว่ามันจะสนใจถ้ามีอะไรที่ง่ายกว่านี้ :)
Nikita Rybak

2
= เริ่มต้นฉันคิดว่าจุดเริ่มต้น - จุดสิ้นสุดจะเป็นทั้งหมด = จบ # คุณอาจเพิกเฉยต่อความคิดเห็นของฉันเนื่องจากความคิดเห็นทั้งหมด: P
Garfield

3
ใช้งานได้ถ้า = อยู่ที่จุดเริ่มต้นของบรรทัดใหม่เช่นเดียวกับในคำตอบ
dhaval

จะเป็นอย่างไรถ้าเป็นเช่นนี้ <% =%>? แฮชจะไปที่ไหน - ก่อนหรือหลังเครื่องหมายเท่ากับ?
BKSpurgeon

อ๊ะพยายามเพิ่มความคิดเห็นด้วยรหัสหลายบรรทัด จะโพสต์คำตอบแทน.
ViggoV

30

=beginวิธีเป็นเพราะน่ารำคาญ:

  1. ใช้ไม่ได้กับ HTML และ Ruby แบบผสม (หรือแค่ HTML) ที่อยู่ในบรรทัดเดียว
  2. มันน่ารำคาญในการพิมพ์

<% if false %>วิธีการทำงาน แต่มันดูแปลกและไม่ให้คนอื่น ๆ ที่มีลักษณะที่รหัสของคุณคำแนะนำเกี่ยวกับความตั้งใจของคุณ

วิธีแก้ปัญหาของฉันมีดังนี้:

ในapplication_helper.rbเพิ่มวิธีการเพื่อ:

def comment
end

จากนั้นในเทมเพลตมุมมองของคุณคุณสามารถพูดว่า:

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

วิธีนี้ใช้ได้ผลเนื่องจากเมธอด Ruby ใด ๆ สามารถบล็อกได้ แต่จะเพิกเฉยต่อบล็อกที่ส่งผ่านไปโดยไม่โต้ตอบหากวิธีของคุณไม่มี a yield.


3
คุณสามารถเขียนเป็น <% comment do%> ... <% comment end%> ฉันได้เพิ่มไวยากรณ์นี้ลงในข้อความประเสริฐเพื่อให้ดูเหมือนความคิดเห็นจริง
Mariano Cavallo

1
ทางออกที่น่ารัก !! การปรับปรุงอย่างหนึ่ง: การแสดงความคิดเห็นเพื่อปิดการใช้งานเป็นประเภทของการแฮ็กดังนั้นควรเรียกใช้วิธีการนี้ignoreหรือdisableและเราจะได้รับโซลูชันความหมายอย่างสมบูรณ์:<% ignore do %>…<% end %>
tanius


7

สำหรับบล็อกความคิดเห็นในเทมเพลตโปรแกรมแก้ไขข้อความของฉัน (Komodo) พบรูปแบบนี้ในคำแนะนำของ @ Garfield ที่น่ารังเกียจน้อยที่สุด:

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

6

ในการแสดงความคิดเห็นแท็ก erb ให้ใช้สัญลักษณ์แฮชของความคิดเห็นทับทิมก่อนเครื่องหมาย = ในแท็กเปิด

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

เท่าที่ฉันเข้าใจเขากำลังมองหาวิธีแก้ปัญหาการแสดงความคิดเห็นแบบหลายบรรทัด: ถ้าฉันมีบล็อกของ n บรรทัดฉันแค่ต้องการเพิ่มบรรทัดที่ด้านบนและด้านล่าง (หรืออาจเป็นสองสามบรรทัด) และมี งาน. ฉันไม่ต้องการที่จะต้องแก้ไขบล็อกทั้งหมด
dionyziz

6

เนื่องจากคุณสามารถใช้<% %>เพื่อใส่บล็อกทับทิมจึงสามารถใช้เพื่อแสดงความคิดเห็นได้อย่างแน่นอน

วิธีแก้ปัญหาที่เรียบง่ายและสง่างามจะมีลักษณะดังนี้ ...

<%
# 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
วิธีนี้ใช้ไม่ได้ แท็กทับทิมใด ๆ ที่อยู่ในความคิดเห็นของบล็อกจะปิดบล็อกด้านนอก
Hovis Biddle

4

หลังจาก = เริ่มต้นคุณไม่จำเป็นต้องใส่%>

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

เป็นเพียงข้อมูลเพิ่มเติมของคำตอบก่อนหน้านี้บางส่วน ฉันพบว่าวิธีแก้ปัญหา = start / = end มีประโยชน์มากที่สุด แต่เพื่อความสวยงามฉันเขียนดังนี้:

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

โปรดทราบว่าเนื่องจากทุกอย่างถูกละเว้นจนกว่า=endจะไม่จำเป็นต้องปิด=beginแท็กด้วย%>หรือเปิด=endแท็กด้วย<%(ซึ่งได้ระบุไว้ในคำตอบก่อนหน้านี้ด้วย)

ฉันพบว่านี่เป็นวิธีแก้ปัญหาที่สวยงามที่สุดในการสร้างบล็อกของรหัสทับทิมและ html แบบผสมและทำให้เป็นสีเทาในตัวแก้ไขของฉันด้วยซึ่งตรงข้ามกับ<% if false %>โซลูชัน อุปสรรคเพียงอย่างเดียวคือ=beginและ=endต้องวางไว้ที่จุดเริ่มต้นของบรรทัด ..


1
ฉันได้รับข้อผิดพลาดนี้: "เอกสารที่ฝังอยู่ตรงจุดสิ้นสุดของไฟล์"
Kieran Andrews

2

ใช้ HEREDOC ที่เรียกว่าความคิดเห็น

ข้อดี:

  • อธิบายตนเองว่านี่คือความคิดเห็น
  • ใช้ได้กับแท็ก erb และ HTML
  • มีการเน้นไวยากรณ์ที่ใช้ได้ (เป็นสตริงยาวหนึ่งสาย)

จุดด้อย:

  • ไวยากรณ์การปิด 3 บรรทัดแปลก ๆ
  • ไม่มีแป้นพิมพ์ลัด

รหัส:

แท็กเปิดสามารถเป็น

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

หรือ

<%
<<-COMMENT
%>

ทุกอย่างที่นี่จะไม่ทำงานหรือแสดงในเบราว์เซอร์

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

แท็กปิด

ใช่ต้องเป็น 3 บรรทัด😟 ฉันไม่รู้ว่าทำไมแท็กเปิด erb ถึงสำคัญ แต่มันคือ! (เว้นแต่คุณไม่ได้ใช้แท็ก erb ในความคิดเห็น)

<%      
COMMENT
%>

1

คุณต้องจำไว้ว่าโค้ดถูกเรียกใช้งานที่ไหน ข้อคิดเห็นแบบรูบี้ทำงานได้เนื่องจากโค้ด Ruby ถูกเรียกใช้บนเซิร์ฟเวอร์ก่อนที่จะถูกส่งไปยังเว็บเบราว์เซอร์ นอกจากนี้ยังอธิบายว่าเหตุใดความคิดเห็น HTML จึงไม่ทำงาน Ruby ได้ถูกเรียกใช้

IDE ที่คุณใช้ไม่รองรับการสร้างมาโครที่กำหนดเองสำหรับการแสดงความคิดเห็นบล็อกโค้ดใช่หรือไม่


1) คุณพูดถูกความคิดเห็น jsp มีรูปแบบที่แตกต่างกันเล็กน้อยฉันอัปเดตโพสต์ 2) ฉันไม่พบอะไรแบบนั้นใน IDEA หรือ Netbeans คุณมี IDE อะไรเป็นพิเศษในใจที่พูดสิ่งนี้หรือไม่?
Nikita Rybak

1
ไม่ฉันไม่ได้ โดยส่วนตัวฉันไม่ได้ใช้ IDE สำหรับโปรเจ็กต์ Rails
John Topley

1

ทางลัดความคิดเห็นบล็อกของ Sublime Text ctrl+shift+/จะแจ้งให้ทราบว่าคุณได้เลือก HTML ปกติหรือแท็ก Erb แล้วใส่<!---หรือ<% =begin %>ตามนั้น


ใช่ แต่จะยังไม่แสดงความคิดเห็นทั้ง HTML และ Ruby
Adamantish

อืม ... ดูเหมือนจะเป็นสาเหตุที่ดีสำหรับปลั๊กอินที่กำหนดเอง บางทีคุณอาจกดctrl+dเพื่อเลือกจุดเริ่มต้นของทุกแท็ก Erb <%ภายในบล็อกแล้วกดctrl+shift+/จากนั้นกดอีกครั้งเพื่อให้บล็อกทั้งหมดแสดงความคิดเห็น HTML
iono

1

คุณสามารถใช้ทั้งความคิดเห็น <% if false%> และ HTML ได้ในเวลาเดียวกัน:

<%if false%><--

stuff to comment out

--><%end%>

ประโยชน์คือ:

  • ไม่มีการเรียกใช้รหัส Ruby

  • บล็อกที่แสดงความคิดเห็นมีสีเทาใน IDE

  • ความตั้งใจนั้นชัดเจนสำหรับนักพัฒนาคนอื่น ๆ


0

นี่เป็นเพียงคนเดียวที่ได้ผลสำหรับฉัน

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

ฉันหวังว่าฉันจะระเบิดความคิดของคุณ!


-4

วิธีแก้ปัญหาที่ยอมรับได้วิธีเดียวที่ฉันเคยพบกับปัญหาการทำลายหลังนี้คือการใส่ช่องว่างภายใน "<% =" เพื่อให้ไม่มีการลงทะเบียนเป็นรหัสทับทิมอีกต่อไปจากนั้นแสดงความคิดเห็นทั้งบล็อกด้วยความคิดเห็น html

แบบนี้:

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

ใช่การเพิ่มช่องว่างนั้นน่ารำคาญ แต่มันน่ารำคาญน้อยที่สุดในบรรดาวิธีแก้ปัญหาทั้งหมดที่ฉันเคยเห็น


1
คุณอาจเพิ่ม#... แทนการส่งทับทิมในเอกสารก็ได้เช่นกัน
สูงสุด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.