2015-11-17 66 views
0

這可能是一個愚蠢的問題,但它是嚇到我了設計登錄一個模式,而是兩種不同的佈局

假設我有adminapplication佈局。我有以下代碼:

# For admin layout 
class Admin::BaseController < ApplicationController 
    layout 'admin' 
    before_action :authenticate_user! 
end 

# For application layout 
class DashboardController < ApplicationController 
    before_action :authenticate_user, only: :index 

    def index 
    end 
end 

現在,我訪問/admin,它將我重定向到users/sign_in,除非我在用戶登錄我。同樣,如果我訪問dashboards也會發生同樣的情況。

也注意到,我使用user色器件模型,用於存儲用戶信息和role用於存儲用戶的角色。這意味着,admin用戶可以訪問admin佈局,other role用戶可以訪問application佈局。

要求:

就像,我已經分居admin佈局管理員用戶和application佈局other role用戶。

我想分開adminapplication佈局的登錄佈局。

如果用戶正在訪問/admin那麼他們應該重定向到admin登錄佈局,如果用戶訪問/dashboards他們應該重定向到application佈局,如果他們沒有登錄。

回答

0

你可以只設置一個會話變量在管理基本控制器,如:

class Admin::BaseController < ApplicationController 

    # Set the admin layout 
    before_action :use_admin_layout 
    before_action :authenticate_user! 

    private 

    def use_admin_layout 
     session[:admin_layout] = true 
    end 

end 

然後在ApplicationContoller剛剛設置的佈局,像這樣:

layout "admin" if session[:use_admin_layout] 

您只需要考慮清除任何NON管理員控制檯的會話。可能在before_action。只需添加到您的ApplicationConroller

private 

    def clear_admin_layout 
     session[:admin_layout] = nil 
    end 

,並調用它在必要時:

before_action :clear_admin_layout 
+0

以及有意義....,我會試試看 – przbadu

相關問題