2010-12-07 5 views
1

awesome_nested_set과 페이지라는 단일 테이블을 사용하여 매우 간단한 사이트 설정을했습니다.Ruby on Rails - 관리 인터페이스에서 레이아웃을 관리하는 방법은 무엇입니까?

페이지를 만들고 업데이트 할 때 관리자가 다른 레이아웃을 선택할 수있는 기능을 원합니다. 내가 상상 한 것은 레이아웃/템플릿을 선택할 수있는 페이지 양식의 드롭 다운입니다.

레이아웃에 대해 알고있는 유일한 점은/views/layouts /에 추가해야하며 컨트롤러 상단에 레이아웃을 지정해야한다는 것입니다. 앱 자체 내에서 페이지 단위로 레이아웃을 관리하는 방법이 필요합니다.

그게 가능합니까? 그렇다면 어떻게 시작해야 할지를 고위급에서 설명 할 수 있습니까?

편집이 같은

뭔가 그래서 같은 레이아웃 키 : 또한 설정할 수 있습니다

def some_action 
    #... stuff 
    render "some_action", :layout => "custom_layout" 
end 

를 제공하여 렌더링에
alt text

답변

1

, 당신은 등 one_column.html.erb, two_column.html.erb, 같은라는 views/layouts에있는 파일을 가정하고, 속성이 당신 페이지 모델 layout이라고 당신은 다만 수 :

def show 
    @page = Page.find(params[:id]) 
    render :action => "show", :layout => @page.layout 
end 

그게 당신이 찾고있는거야?

+0

나는 그렇게 생각한다. 당신은 karmajunkie의 대답에 거의 같은 후속 질문을 추가하면서 동시에 응답했을 것입니다. 결국 관리자의 레이아웃 내용을 관리하고 싶지만, 지금은 몇 가지 미리 정의 된 레이아웃 (one_column.html.erb, two_column.html.erb)을 만든 다음이를 선택하는 것으로 충분합니다. 속성 드롭 다운을 통해. 감사! – jyoseph

+0

당신을 진심으로 환영합니다. 도움이 되었기 때문에 기쁩니다. 추신 - 그게 답이라면 그걸 표시해주세요. :-) – Todd

+0

완료! 이봐 요,이게 바보 같은 생각이라고 생각하니? 나는 이것이 총회에 반대하는지 잘 모르겠다. 기본적으로 diff 페이지의 diff 레이아웃을 갖고 싶습니다. – jyoseph

4

당신은 쉽게 레이아웃을 변경할 수 있습니다 레이아웃을 컨트롤러 정의의 심볼에 적용하고 컨트롤러는 관련 메서드를 실행하여 어떤 레이아웃을 선택할지 결정합니다.

class UsersController < ApplicationController 
    layout :decide_layout 

    private 
    def decide_layout 
     some_boolean ? "layout1" : "layout2" 
    end 
end 

또한 사용법과 다른 곳에서 방법을 사용하지 않으려면 심볼을 proc로 바꿀 수 있습니다. 마지막으로 액션 자체에서 #layout을 호출 할 수도 있습니다.