2010-01-28 4 views
2

컨트롤러 레이아웃은 컨트롤러와 컨트롤러가 다르지만 각 컨트롤러 메서드 뷰 간에는 다릅니다. 뷰에서 반복적 인 "content_for"피하기

내 응용 프로그램의 레이아웃은 다음이

<%= yield :submenu %> 

그러나,이 종류의 반복적 인 느낌이있다,

수행하는 방법에 대한 모든보기에서

<% content_for(:submenu) do %> 
    <%= render :partial => 'submenus/correct_submenu' %> 
<% end %> 

: 내가 현재하고있는 중이하면 다음과 같다 그것은 각보기에 대해. 컨트롤러 당이 작업을 수행 할 수있는 방법이 있습니까?

답변

9

제 제안은이 규칙을 따르는 것이므로 ProductsController이있는 경우 하위 메뉴는 submenus/products_menu이됩니다. 당신이 보이는 도우미를 쓸 수있는이 방법은 같은 :

def render_submenu 
    content_for(:submenu) { render :partial => "submenus/#{controller.controller_name}_menu" } 
end 

그런 다음 수행하여이를 호출 할 수

<%= render_submenu %> 

당신은 다음이 하위 메뉴 content_for 기본 만들 수 있습니다 만 그 경우 내용을 지정 다를 필요가있다.

도움이 되었기를 바랍니다. 응용 프로그램 레이아웃에서 특정 컨트롤러의 레이아웃과 같이 파일을 생성하여 둥지

1

사용 nested layouts :이 방법

# app/view/layouts/<controller_name>.html.erb 
<% content_for(:submenu) do %> 
    <%= render :partial => 'submenus/correct_submenu' %> 
<% end %> 
<%= render template: "layouts/application" %> 

, 당신은보기 파일들을 수정할 필요가 없습니다.

관련 문제