2010-01-08 3 views
11

이전에 질문을 받았지만 Google을 검색했지만 해결 방법을 찾지 못했습니다.레일 : 레이아웃 내에서 "yield"뒤에 "content_for"를 사용하십시오.

layouts/application.html.erb: 
<html> 
    <head> 
    ... some other stuff 
    <%= yield :head %> 
    </head> 
    <body> 
    <% content_for :head, "something that belongs in the head" %> 
    </body> 
</html> 

공지 사항 content_for 전에 수율 을 :

그래서 이것은 내가 레일 2.3.5에서 할 노력하고있어 것입니다.

레일스는 기본적으로 다음과 같은 내용을 허용하지 않습니다. yield가 사용되었습니다.

심지어 템플릿 렌더링 프로세스에 연결했지만 지금까지 성공하지 못했습니다.

내 목표는 부분/템플릿 내부에서 content_for를 정의하고 응답이 브라우저로 전송되기 바로 전에 "수익률"이 지연되고 실행되도록하는 것입니다.

누군가 솔루션을 제안 했습니까?

인사와 감사, 프랭크

내가 weppos의 아이디어에 가서 랙 미들웨어에 자신을 시도 할 것이다 업데이트. 감사

답변

13

렌더링 프로세스는 먼저 동작 템플릿을로드하여 실행 한 다음 선택한 레이아웃으로 템플릿을 장식합니다. 레이아웃이 상단에서 하단으로 렌더링되므로 :head이 이미 렌더링 된 후에 :head에 콘텐츠를 추가 할 수 없습니다.

전략을 변경해야합니다. 조각을 부분적으로 배치하고 작업보기에 첨부하거나 Rack 모듈/after_filter와 같은 사후 처리 전략을 사용하여 html 코드를 직접 변경하십시오.

나는 실제로 내가 필요로하는 것을 바탕으로 더 나은 해결책을 찾으려고 노력할 것입니다. 이 문제가 발생하는 경우 오류는 앱 아키텍처에서 발생할 가능성이 큽니다.

7

content_for 문에 등호가 없어야합니다. 그것은이어야합니다 :

<% content_for :head, "Something that belongs in the head" %> 

콘텐츠를 템플릿과 부분적으로 정의하면 작동합니다. 이 기술은 Railscast episode 8에서 다뤄졌습니다.

관련 문제