Rails의 ERB에서 <%, <% =, <% # 및-%>의 차이점은 무엇입니까?


368

ERB 파일에서 사용되는 다음 문자의 사용법을 설명해 주시겠습니까?

<%   %>
<%=  %>
<%  -%>
<%#  %>

각각의 사용법은 무엇입니까?


1
여기에 좋은 답변이 있습니다. 또한 Haml은 종종 ERb의 우수한 대안입니다.
Marnen Laibow-Koser

1
예, ERb보다 다루기가 훨씬 쉽습니다.
simo


@Ciro Santilli : 나이에도 불구하고, 이것은 당신의 참고 자료보다 더 완전한 것 같습니다. 나는 이것의 속임수로 그것들을 마무리하기로 투표하고 있습니다 ..
브래드 Werth

<%= %>그리고 <%= -%>다른 : 공백을 후행 후자 만 제거합니다은.
illusionist

답변:


476
<% %>

대괄호 안에서 루비 코드를 실행합니다.

<%= %>

erb 파일로 무언가를 인쇄합니다.

<% -%>

식 후 줄 바꿈을 피합니다.

<%# %>

괄호 안에 코드를 주석 처리하십시오. HTML 주석이 아닌 클라이언트로 전송되지 않습니다.

ERB에 대한 자세한 정보는 Ruby Doc 을 방문하십시오 .


17
나는 코드의 어딘가 에서이 변형을 다른 곳에서 만났다.
okliv

38
double equal은 raw와 같이 문자열이 이스케이프되지 않음을 의미합니다.
Richard_G

7
레일은 다음 stdlib ERB를 사용하지 않습니다이 사용 erubis : github.com/rails/rails/issues/16766#issuecomment-54148778
치로 틸리가郝海东冠状病六四事件法轮功

3
그러나 ...하지만 ... 바로 뒤에 Ruby 주석 <%#이있는 것은 정상 <%입니다 #... 그렇습니다. 특별하다고 생각하는 것이 재미 있지만 특별한 구문 구조가 아니라 ERB 관용구가 아닌가?
BalinKingOfMoria 복원 CM

6
당신은 여러 ERB이있는 경우 죄송 @QPaysTaxes 그것에 대해, 당신이 맞아요 ... 예를 들어 <%...%>, <%#...%>주석으로 모든 것이 (단지 보통의 주석 인 경우는하지 않을 것입니다 그것의는, 즉, 그것은 단지 줄을 주석 것 켜졌 어).
BalinKingOfMoria Reinstate CMs

86

<% %>그리고 <%- and -%>어떤 루비 코드입니다,하지만 출력 결과를 않습니다 (예 : if 문). 둘은 동일합니다.

<%= %> Ruby 코드의 결과를 출력하기위한 것입니다

<%# %> ERB 의견입니다

다음은 좋은 안내서입니다. http://api.rubyonrails.org/classes/ActionView/Base.html


여는 <%-것이 공백을 이끄는 데 도움이되는 것을 보지 못하며 어디에도 문서화되어 있지 않습니다. 확실합니까? 어쩌면 다른 ERB 맛일 수도 있습니다. stdlib 문서에는 옵션이 표시되지 않습니다.
Andrew Vit

1
@AndrewVit-이 답변에서 참조 된 페이지 (ActionView :: Base 문서 페이지) : "<%-및-%>는 후행 줄 바꿈을 포함하여 선행 및 후행 공백을 억제하고 <% 및 %>와 상호 교환하여 사용할 수 있습니다. "
얼 젠킨스

5
<% = %>의 선행 공백을 억제하는 방법은 무엇입니까?
보그 단 구시 에프

51

Rails는 기본적으로 stdlib의 ERB 를 사용 하지 않고 erubis를 사용 합니다 . 출처 : 이 어플의 개발자의 코멘트 , ActionView의 gemspec , 이 글을 쓰는 동안 내가 한 허용 병합 요청 .

있는 방법 하이픈 사업자에 특히 그들 사이의 행동 차이, %-그리고 -%작품.

문서가 부족하다. Ruby의 ERB 형식은 "공식적으로"정의 된 곳은 어디인가? 다음은 경험적 결론입니다.

모든 테스트는 다음을 가정합니다.

require 'erb'
require 'erubis'

사용할 수있을 때 -

  • ERB : 통과해야합니다 -trim_mode의 옵션 ERB.new을 사용하는.
  • erubis : 기본적으로 활성화되어 있습니다.

예 :

begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end
ERB.new("<%= 'a' -%>\nb"  , nil, '-') .result == 'ab'  or raise
Erubis::Eruby.new("<%= 'a' -%>  \n b").result == 'a b' or raise

무엇을 하는가 -%:

  • ERB : 개행 문자 인 경우 다음 문자를 제거하십시오.

  • 루비 :

    • <% %>(없이 =) -때문에 쓸모 <% %><% -%>동일하다.<% %>공백 만 포함하는 경우 현재 줄을 제거하고 다른 방법은 없습니다.

    • <%= -%>(로= ) :

      • 공백 만 포함 된 경우 전체 줄을 제거하십시오.
      • 그렇지 않으면 태그 앞에 공백이없고 흰색 만 남은 경우 뒤에 나오는 흰색 스푼을 제거하십시오.
      • 그렇지 않으면 태그 뒤에 공백이 없습니다.

예 :

# Remove
ERB.new("a \nb <% 0 -%>\n c", nil, '-').result == "a \nb  c" or raise

# Don't do anything: not followed by newline, but by space:
ERB.new("a\n<% 0 -%> \nc", nil, '-').result == "a\nb \nc" or raise

# Remove the current line because only whitesapaces:
Erubis::Eruby.new(" <% 0 %> \nb").result == 'b' or raise

# Same as above, thus useless because longer.
Erubis::Eruby.new(" <% 0 -%> \nb").result == 'b' or raise

# Don't do anything because line not empty.
Erubis::Eruby.new("a <% 0 %> \nb").result == "a  \nb" or raise
Erubis::Eruby.new(" <% 0 %> a\nb").result == "  a\nb" or raise
Erubis::Eruby.new(" <% 0 -%> a\nb").result == "  a\nb" or raise

# Don't remove the current line because of `=`:
Erubis::Eruby.new(" <%= 0 %> \nb").result == " 0 \nb" or raise

# Remove the current line even with `=`:
Erubis::Eruby.new(" <%= 0 -%> \nb").result == " 0b"   or raise

# Remove forward only because of `-` and non space before:
Erubis::Eruby.new("a <%= 0 -%> \nb").result == "a 0b"   or raise

# Don't do anything because non-whitespace forward:
Erubis::Eruby.new(" <%= 0 -%> a\nb").result == " 0 a\nb"   or raise

무엇을 하는가 %-:

  • ERB : 태그 앞과 줄 바꿈 뒤에 공백을 제거하십시오 (앞에 공백 만있는 경우에만).

  • erubis : ( with with) <%- %>와 동일 하기 때문에 쓸모 가 없으며 , 유용한 유일한 경우 와 함께 사용할 수 없습니다 . 따라서 이것을 사용하지 마십시오.<% %>==-%

예 :

# Remove
ERB.new("a \n  <%- 0 %> b\n c", nil, '-').result == "a \n b\n c" or raise

# b is not whitespace: do nothing:
ERB.new("a \nb  <%- 0 %> c\n d", nil, '-').result == "a \nb   c\n d" or raise

무엇 %--%함께

두 가지 효과의 정확한 조합.


1
두 번째 줄에서 Rails는 eruby를 연결하는 동안 eruby를 사용한다고 작성했습니다.
Daniel Jonsson

1
@DanielJonsson은 보고서에 감사드립니다. 너무 많은 버전으로 견딜 수 있습니다. 업데이트되었습니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

10
  • <% %> : 루비 코드를 실행합니다
  • <%= %>: Erb 파일로 인쇄합니다. 또는 브라우저
  • <% -%> : 식 후 줄 바꿈을 피합니다.
  • <%# %> : ERB 의견

7

<%%문자 태그 구분 기호가 불명확하기 때문에 이에 대한 답변으로 추가했습니다 . 이것은 erb에게<% chart.js 툴팁 표시와 같은 js 앱에 필요한 태그 일부 말라고 지시합니다.

업데이트 (고정 된 깨진 링크)

ERB에 대한 모든 정보는 이제 https://puppet.com/docs/puppet/5.3/lang_template_erb.html#tags 에서 확인할 수 있습니다.


1
이 링크 정확하게 OP 응답
벤 틴 슬리에게

링크가 끊어졌습니다
andreofthecape

새로운 링크로 업데이트되었습니다!
bkunzi01

3

루비 온 레일에서 사용됩니다. :-

<% %> :-

<% %> 태그는 조건, 루프 또는 블록과 같은 것을 반환하지 않는 Ruby 코드를 실행하는 데 사용됩니다. 예 :-

<h1>Names of all the people</h1>
<% @people.each do |person| %>
  Name: <%= person.name %><br>
<% end %>

<% = %> :-

내용을 표시하는 데 사용합니다.

Name: <%= person.name %><br>

<%-%> :-

Rails는 ERB를 확장하여 Rails 템플릿의 태그에 후행 하이픈을 추가하여 줄 바꿈을 억제 할 수 있습니다.

<% # %> :-

코드를 주석 처리

<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>

1

<% %>코드를 거기에 실행하지만 결과를 인쇄하지 않습니다. 예를 들어 :
erb 파일에 다른 코드를 사용할 수 있습니다.

<% temp = 1 %>
<% if temp == 1%>
  temp is 1
<% else %>
  temp is not 1
<%end%>  

인쇄합니다 temp is 1


<%= %>코드를 실행하고 출력을 인쇄합니다 (예 :
레일 변수 값을 인쇄 할 수 있음).

<% temp = 1 %>
<%= temp %>  

인쇄합니다 1


<% -%>그것은 아무것도 인쇄되지 않는 차이가 없습니다 -%>에서만 의미가 있습니다<%= -%> 있습니다. 새로운 줄을 피할 수 있습니다.


<%# %> 이 안에 작성된 코드를 주석 처리합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.