2011-05-02 5 views
2

내 웹 응용 프로그램에서 사용자의 개인 페이지를 만들려고합니다. 따라서 다른 페이지 템플릿과 다른 CSS 템플릿을 사용하고 싶습니다.application.html.erb 템플릿 외부의 특정 메서드 렌더링

예를 들어 나는 모든 콘텐츠가 'yield'호출 내에서 렌더링되는 application.html.erb에 내 레이아웃이 있습니다.

이제 컨트롤러 (예 : UsersController의 show_personal_page)의 특정 메서드를 완전히 다른 레이아웃과 스타일로 리디렉션하고 싶습니다 (모든 사용자에 맞게 사용자 정의 가능). 문제는 내가하는 모든 작업이 application.html.erb 템플릿을 통과하므로 동일하게 보일 것입니다. 나는이 작업을 수행하는 한 가지 방법을 생각

'경우'와 '다른'조항 application.html.erb 안에 넣어하지만 그것은 단지

(즉, 모든 스타일을 레일되지 않음) 잘 될 것 같지 않습니다

아이디어가 있으십니까?

감사합니다.

답변

3

users.html.erbapp/views/layout 인 경우 레일즈는 users_controller에있는 모든보기에 대해 해당 레이아웃을 자동으로 사용합니다 (예 : 컨트롤러 이름으로 레이아웃을 만드는 경우). 당신이 컨트롤러의 특정 방법의 레이아웃을 사용하려면

, 당신은

class UsersController 
    layout 'user', :only => :show_personal_page 
    . 
    . 
end 

사용하거나 직접

class UsersController 
    def show_personal_page 
    . 
    render :layout => :user 
    end 
end 

당신은 선택할 수 있습니다 방법에서 레이아웃을 호출 할 수 있습니다 방법에서 render :layout => false을 사용하거나 컨트롤러 상단에서 layout nil을 사용하여 레이아웃을 사용하십시오. 조건부 레이아웃을 지정하려면

는 가장 좋은 방법은이

class UsersController 
    layout :conditional_layout, :only => :show_personal_page 

    def conditional_layout 
    ..(your condition) 
    (return correct layout) 
    end 
    . 
    . 
end 
처럼 될 것입니다해야 할 일
0

다음, views/layouts/user.html.erb에 새로운 레이아웃을 생성하여 컨트롤러에서 설정 :

layout 'user' 

아니면 layout false을 설정하고보기 파일에있는 페이지의 모든 구조를 넣어 레이아웃에 의존하지 수 조금도.

1

당신은 사용자 컨트롤러에서 특정 레이아웃을 렌더링 할 수 있습니다

class UsersController < ApplicationController 
    ... 

    def controller_method 
    #should be a string (:layout requires a string) 
    var user_specific_layout = get_specific_layout(user) 
    render :layout => user_specific_layout 
    end 
end 

체크 아웃 Layouts and Rendering in Rails 가이드 더 많은 정보를 원하시면.

또한 레이아웃 방법에 PROC를 전달할 수
0

: 당신이 레이아웃을 만들 경우

class UsersController 
    layout 'user' 
    . 
    . 
end 

Infact는을 : 당신은 항상 상단을 정의하여 컨트롤러에 대한 사용자 정의 레이아웃을 정의 할 수 있습니다

def MySuperController < ApplicationController 
    layout Proc.new{|controller| controller.current_user.layout} 
    ... 
end 
관련 문제