2013-09-27 2 views
2

나는 증명서의 my_testimonials 조치에 내 고객의 성명을 표시하는 페이지가 있습니다. 여기잘못된 레이아웃 렌더링

layout "layouts/frame", only: [:my_testimonials] 
layout "layouts/shares", only: [:new] 

출력에 : 지금은 여기

layouts/application 레이아웃 컨트롤러에 지정되고 렌더링되기 때문에

이 작업에 대한 올바른 레이아웃은 layouts/frame하지만 난 뭔가를 변경해야합니다 콘솔 :

Started GET "/my_testimonials/c4ca4238a0b923820dcc509a6f75849b" for 105.228.65.202 at 2013-09-27 07:40:49 +0000 
2013-09-27T07:40:49.470211+00:00 app[web.2]: Processing by TestimonialsController#my_testimonials as HTML 
2013-09-27T07:40:49.686047+00:00 app[web.2]: Rendered testimonials/_testimonial.html.erb (2.6ms) 
2013-09-27T07:40:49.686200+00:00 app[web.2]: Rendered testimonials/my_testimonials.html.erb within layouts/application (79.2ms) 

추천 문구가 표시되지만 잘못된 레이아웃이 표시됩니다. 나는 어제 일하고 있다고 말했기 때문에 작은 세부 사항이나 무언가의 순서를 변경 했음에 틀림 없다.

+0

아마 차이는 없겠지만 일반적으로'layout frame "을 쓰면,'layouts' 폴더는 필요 없다고 생각합니다. – nathanvda

+1

@nathandva, 사과, 내 답변을 게시하기 전에 귀하의 의견을 보지 못했습니다. –

+0

차이는 없습니다. 나는 변화를 만들었지 만 레이아웃 렌더링에는 변화가 없었다. 나는 지금 어딘가에 오타가 있다고 가정하고 있지만 나는 그것을 볼 수 없다. – grabury

답변

2

layout() 호출이 이전 호출을 무시한다고 생각합니다. 이 경우 :new에 대해 마지막으로 수행 한 layout() 호출이 :my_testimonials에 대한 호출보다 우선합니다. 또한 choose the layout at runtime

:

layout :set_layout 

protected 

def set_layout 
    case action_name.to_sym 
    when :my_testimonials 
    'frame' 
    when :new 
    'shares' 
    else 
    'application' 
    end 
end 

또는 행동에 따라 레이아웃을 지정

def my_testimonials 
    respond_to do |format| 
    format.html { render :layout => 'frame' } 
    end 
end 

업데이트 :

The code들이 이전의 통화를 오버라이드 (override) 할 제안합니다. 따라서 layout "layouts/shares", only: [:new]을 호출하는 것은 본질적으로 :new에 "공유"를 사용하고 그렇지 않으면 "응용 프로그램"을 사용하는 것입니다.

+0

감사합니다. 그것은 모두 다시 작동합니다! – grabury

+0

@spuggy : 다른 관련 문제가없는 경우 대답을 수락하는 것을 잊지 마십시오. – kristinalim

0

레일스는 'app/layouts /'폴더에서 레이아웃을 찾습니다. Section 2.2.2

그래서 'layouts/frame'을 지정할 때 레일은 분명히 찾을 수없는 'app/layouts/layouts/frame'을 찾습니다.

는 다음에 레이아웃 지시어를 변경

:

layout "frame", only: [:my_testimonials] 
layout "shares", only: [:new] 
+0

변경 사항을 적용했지만 여전히 애플리케이션 레이아웃을 사용하고 있습니다. 나는 곤두박질 친다. 내가 확인할 수있는 건 없니? – grabury

0

변화

layout "layouts/frame" 

layout 'frame' 

에 내가이 일을한다고 생각합니다.

+0

변경 사항을 적용했지만 여전히 애플리케이션 레이아웃을 사용하고 있습니다. 나는 곤두박질 친다. 내가 확인할 수있는 건 없니? – grabury

+0

보기에서 응용 프로그램 레이아웃을 렌더링하지 않았는지 확인하거나 응용 프로그램을 다시 시작하십시오. – tommybernaciak