2012-12-21 4 views
0

보석 devise을 사용 중입니다. Devise는 애플리케이션 컨트롤러를 확장하고 사용자 관리를 레일 애플리케이션에 추가합니다.Devise 컨트롤러의 레이아웃 변경

나는 보석의 내부를 볼 때 내가 라인

class Devise::SessionsController < ApplicationController 

내가 AdminController라는 이름의 내 사용자 정의 컨트롤러에서 상속 컨트롤러를 고안 원하기 때문에 내가 이것을 변경하려고 다음을 참조 할 수 있습니다. 이유는 전체 웹 응용 프로그램이 끝났기 때문에 페이지의 관리자 부분에서 내 응용 프로그램 레이아웃, css, js를 사용하지 않기를 원합니다 ...

컨트롤러의 기본 클래스를 어떻게 동적으로 변경할 수 있습니까? 또는 application.html.erb 레이아웃 대신 admin.html.erb 레이아웃을 사용하도록 동적으로 컨트롤러에 알리십시오.

내가 "역동적으로"라고 말하면 원숭이 패치를 의미합니다. 고맙습니다.

+0

컨트롤러 http://guides.rubyonrails.org/layouts_and_rendering.html에서 레이아웃을 지정할 수 있습니다. 사용자 정의 레이아웃으로 'Devise :: SessionsController' 원숭이 패치에 대한 방법을 찾고 있습니다. –

답변

2

을 사용하는 레이아웃 컨트롤러의 mespace는 Devise admin 레이아웃을 사용합니다.

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    layout :determine_layout 

    def determine_layout 
    module_name = self.class.to_s.split("::").first 
    return (module_name.eql?("Devise") ? "admin" : "application") 
    end 
end 
+1

안녕하세요. 정말 멋지다! 우리는 살고 배웁니다. 그것이 즐거워지기 때문에, 모든 것을 아는 날이 되길 바랍니다. _ 아무 것도 없습니다.) –

+0

동의! 트위터에 대한 좋은 hehe –

2

Devise는 rails engine입니다. 사이트의 관리자 섹션을 만드는 가장 좋은 방법은 레일 엔진을 만드는 것입니다. 또는 rails_admin 또는 activeadmin을 사용하는 것이 더 좋습니다. 당신이 당신의 AdminController에

layout "admin" 

을 추가하고보기에 사용자 지정 관리 레이아웃을 추가하면 그들은 rails engines

I 앱 당신의 내부 일을 모르는에 대한 railscast이 모두 레일 엔진이지만,/NA 경우,

<%= stylesheet_link_tag 'admin' %> 
<%= javascript_include_tag "admin"%> 

와 폴더 AdminController 전망이 내 문제를 해결 관리자 스타일 시트와 자바 스크립트

+0

이 보석은 매우 감사합니다. 당신은 여전히 ​​그 사이트의 일부를 "admin"이라고 부르겠습니다. 사용자 관리가 필요하다는 진짜 이유가 있습니다. 응용 프로그램 컨트롤러를 사용하기 때문에 개발자가 자신의 응용 프로그램 컨트롤러를 가지고 있다고 생각하지 않습니다. 응용 프로그램 레이아웃에 정의 된 레이아웃과 다른 레이아웃을 사용합니다. –

+0

아마도 [CanCan] (http://railscasts.com/episodes/192-authorization-with-cancan)이 도움이 될 것입니다. 내 대답 업데이트 –

+0

죄송합니다. devise에 자체 응용 프로그램 컨트롤러가 없습니다. –

2

레이아웃을 변경하기 만하면 컨트롤러 클래스를 다시 열면됩니다. 의 하단에 initializers/devise.rb (최상위 수준의 설정 섹션 아래에, 당신이 쓸 수 :

Devise::SessionsController.layout :admin 

나는이 시도하지했지만, 레이아웃 ActionController에 단지 클래스 메소드이기 때문에 이론적으로는 작동합니다. 기본.

+0

그것을 시도, 그것은 '레이아웃 ='방법이 없다고 말했다. –

+0

@ 돌고래 '='기호를 넣으면 안됩니다. 위의 작업을 수행 할 수 있어야합니다 (예 :'layout : admin', * not *'layout = : admin'). –

+0

시도 할 기회를 얻지 못했지만 아마 맞을 것입니다. –