2012-12-21 95 views
0

我正在使用gem devise。 Devise擴展了應用程序控制器並將用戶管理添加到了rails應用程序中。更改設計控制器的佈局

當我看到寶石裏面,我可以看到下面的行

class Devise::SessionsController < ApplicationController 

我想,因爲我想設計控制器從我命名AdminController定製控制器繼承來改變這種狀況。原因是我有完整的Web應用程序完成,我不希望頁面的管理員部分使用我的應用程序佈局,CSS,JS ...

我該如何動態更改控制器的基類?或者動態地告訴控制器使用admin.html.erb佈局而不是application.html.erb佈局。

當我說「動態地」,我的意思是猴子補丁,謝謝。

+0

您可以指定控制器中的佈局http://guides.rubyonrails.org/layouts_and_rendering.html我正在尋找一種方法來使用自定義佈局來安裝猴子補丁'Devise :: SessionsController'。 –

回答

2

這解決了我的問題,如果不適用控制器的mespace是Devise使用管理員佈局。

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

同意!嘿嘿一個推特 –

2

設計是rails engine。我認爲製作網站管理部分的最好方法是製作一個rails引擎。或者更好的是使用rails_adminactiveadmin。他們是兩個軌引擎有一個關於rails engines

我不知道你的機芯應用railscast,但如果添加

layout "admin" 

您AdminController並添加自定義管理員佈局視圖/佈局與

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

文件夾中的AdminController意見將使用管理樣式表和javascript

+0

這些寶石非常好謝謝你,我仍然只是調用網站「管理員」的一部分我需要設計的真正原因是用戶管理。我不認爲設計有它自己的應用程序控制器,因爲它使用我的應用程序控制器。使用與應用程序佈局中定義的佈局不同的佈局。 –

+0

也許[CanCan](http://railscasts.com/episodes/192-authorization-with-cancan)可以幫助你。更新我的答案 –

+0

對不起,設計沒有它自己的應用程序控制器 –

2

如果你只是需要改變佈局,我認爲你應該可以通過重新打開控制器類來實現。在底部你initializers/devise.rb(在頂級的配置部分的下面,你可以寫:

Devise::SessionsController.layout :admin 

我還沒有試過,但在理論上它應該工作,因爲佈局是剛上的ActionController類方法。基地

+0

試過了,它表示沒有'layout ='方法。 –

+0

@Dolphin你已經把'='標誌放在了不應該在的地方。你應該可以做到以上(即'layout:admin',* not *'layout =:admin')。 –

+0

沒有機會嘗試它,但可能你是對的。 –