Rails의 html.erb 템플릿에서 주석 차단


120

루비 코드와 혼합 된 html을 어떻게 주석 처리합니까?

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

jsp에서는 정말 간단합니다. <%-- ... --%>하지만 레일에서 간결한 옵션을 찾을 수 없습니다.

간단한 html 주석은 <!-- ... -->작동하지 않습니다 : 루비 코드는 여전히 실행되고 오류를 울립니다.

if falsehtml 주석과 함께 사용할 수있는 옵션이 있지만 IDE가이를 지원하지 않는다는 것은 말할 것도없고 매우 장황합니다.

놀랍게도 작동하는 순수한 루비에서 오는 옵션도 있습니다.

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

장황하고 이상해 보이고 내가 아는 루비 IDE 중 어느 것도 지원하지 않는다는 점을 제외하면 일반적으로 괜찮습니다.

궁금합니다, 레일에서 이것을하는 '공식'이 있습니까?

감사!

답변:


115

나는 해결책으로 간주하지 않을 것이지만 아마도

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

또는 조금 더럽다고 느끼면 아무것도 출력하지 않는 도우미를 만듭니다.

나는 그것을 필요로하지 않았지만, 이것에 대한 즉시 사용 가능한 솔루션이 없다는 것을 발견했습니다.


@Chloe 왜 당신이 나에게 당신의 의견을 지시했는지 확실하지 않지만 당신은 아주 정확 <%= false %>합니다. <% if false %>= 기호없이 작동하는 제공된 솔루션을 시도해야합니다
jamesc

@jamesc 내 답변을보기 전에 댓글이 삭제되었습니다. 을 (를) 사용하겠다고 말한 댓글을 누군가 삭제했습니다 <%# if false %>.
Chloe

162

한 줄에 주석을 달 때 사용합니다.

<%# your_ruby_code %>

여러 줄의 경우

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

당신이 말한 것이 효과가 있습니다.


2
나는 그것을 알고 있습니다, 더 간단한 것이 있다면 관심이 있습니다 :)
Nikita Rybak

2
P : 결국 당신은 그것의 완전히 주석으로 내 코멘트를 무시할 수있는 모든 = 끝 번호 것 - = 나는 시작 생각 시작
가필드

3
=가 답변 에서처럼 새 줄의 시작 부분에 있으면 작동합니다
dhaval

이 <% = %> 같으면 어떨까요? 해시는 어디로 갈까요? 등호 앞이나 뒤에?
BKSpurgeon

죄송합니다. 여러 줄 코드로 주석을 추가하려고했습니다. 대신 답변을 게시합니다.
ViggoV

29

=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 메소드가 블록을 취할 수 있기 때문에 작동하지만 메소드에 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 뒤에는 %>를 넣을 필요가 없습니다.

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

이전 답변 중 일부에 대한 부록입니다. = begin / = 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
이 오류가 무엇입니까 : "포함 된 문서 파일의 마지막에 부합"
키어런 앤드류스

2

주석이라는 HEREDOC 사용

장점 :

  • 이것이 코멘트라는 자체 설명
  • erb 및 HTML 태그에서 작동
  • ok 구문 강조 표시 (하나의 긴 문자열)

단점 :

  • 이상한 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 스타일 주석은 Ruby 코드가 웹 브라우저에 제공되기 전에 서버에서 실행되기 때문에 작동합니다. 이것은 또한 HTML 주석이 작동하지 않는 이유를 설명합니다. Ruby는 이미 실행되었습니다.

사용중인 IDE가 코드 블록을 주석 처리하기위한 사용자 지정 매크로 생성을 지원하지 않습니까?


1) 맞아요, jsp 댓글의 형식이 약간 다르고 게시물을 업데이트했습니다. 2) IDEA 나 Netbeans에서 그런 것을 찾을 수 없습니다. 이 말을 염두에 둔 특정 IDE가 있습니까?
Nikita Rybak

1
아니에요. 개인적으로 저는 Rails 프로젝트에 IDE를 사용하지 않습니다.
John Topley

1

Sublime Text의 블록 주석 단축키 ctrl+shift+/는 일반 HTML 또는 Erb 태그를 선택했는지 여부를 확인하고 <!---또는 <% =begin %>그에 따라 삽입합니다.


예,하지만 여전히 HTML 루비를 주석 처리하지는 않습니다 .
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.