2012-07-14 5 views
0

나는 레일 3.0.3를 사용하고, 그리고 (A .html.erb 확장자) 다음 템플릿 :Rails의 ERB 렌더링 결과가이 템플릿 코드에서 출력되는 이유는 무엇입니까?

<% "one"; "two"; capture do %> 
    Three 
<% end %> 

로 렌더링됩니다 :

one 

왜입니까? 그것은 아무것도 렌더링해야합니다 같은 혼란을있을 것 같습니다 때문에 내가 <퍼센트 =

편집

를 사용하지 않았기 때문에 그것은,하지 않는 것, 여기에 더 가깝게 실제 템플릿 코드를 유사한 재현하다 I 디버깅있어 :

<% my_string = "" %> 
<% my_string << capture do %> 
    Hello 
<% end %> 
<%= my_string %> 

는 렌더링된다

Hello Hello 

어떤 이유로, 촬상 출력에 부가 my_st 중이므로 링 대신에 렌더링되고 렌더링됩니다.

답변

0

레일 capture helper을 사용하고 있지만 구문이 잘못되었습니다. 나는 그것이 왜 밖으로 인쇄하고 있는지 모르겠다 one. 레일 3.4에서는 아무 것도 출력하지 않습니다. 당신의 구문이 나는 이유를 "하나"가 표시되어 걱정하지 것이다 잘못 때문에

는 여기를

<% @number = capture do %> 
    three 
<% end %> 

this is some html and here is my <%= @number %> 

렌더링 된 것이다 HTML

this is some html and here is my three 

인을 사용하는 올바른 방법 . 대신 캡처 도우미를 올바르게 사용하는 데 더 집중할 것입니다.


편집 :

두 번째 (편집) 예를 들어 첫 번째 것과 동일하지 않습니다. 여기에는 행 번호가 표시되고 마지막 행이 약간 변경되어 진행 상황을 볼 수 있습니다.

1. <% my_string = "" %> 
2. <% my_string << capture do %> 
3.  Hello 
4. <% end %> 
5. before <%= my_string %> after 

결과는 Hello before Hello after입니다. 따라서 3 번 라인이 렌더링되고, 그 다음 5 번 라인은 Hello 값을 포함하는 my_string으로 렌더링됩니다. 이

<% my_string = "" %> 
<% my_string = capture do %> <!-- changed << to = --> 
    Hello 
<% end %> 
before <%= my_string %> after 

로 변경하는 경우

이 결과는 before Hello after입니다.

그럼이게 무슨 뜻입니까? <<을 사용하면 capture 메서드가 엉망입니다. 정상적으로 예상하지는 않지만 캡쳐 블록 안에있는 렌더링 요소가 있습니다.

기본적으로 현재 구문을 사용하지 않으면 여기에서 수행하려는 작업을 수행 할 수 없습니다.

+0

그래, 실제로 다른 문자열에 캡처의 반환 값을 추가하고 있지만 예제를 단순화하기 위해 세부 사항을 생략했습니다. – Daniel

+0

레일즈 3.0.3에 올린 것과 정확히 똑같은 것을 시도해 봤니? – Dty

+0

원래 게시물을 더 나은 예제로 업데이트했습니다. 그리고 예, 저는 두 가지 모두 시도했습니다. – Daniel

관련 문제