2014-01-28 107 views
0

在我的應用我想使用時,用戶登錄不同的佈局,而不是Rails的:不同的佈局

application_controller:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    layout :determine_layout 

    private 

    def determine_layout 
     user_signed_in? ? 'application' : 'landing' 
    end 

end 

但這種代碼不工作:佈局不改變。可以設想造成這種情況嗎?或者我犯了一些錯誤?

謝謝!

+0

代碼看起來沒問題,這是您一直有的佈局? – apneadiving

+0

當用戶登錄它的'應用程序',並且當用戶沒有登錄佈局時,它是'登陸' –

+1

好,所以你的方法工作... – apneadiving

回答

1

正想寫的評論,但它會更容易在這裏處理:

按照Devise github wiki,你能確定它是否是基於devise_controller與否:

class ApplicationController < ActionController::Base 
    layout :layout_by_resource 

    protected 

    def layout_by_resource 
    if devise_controller? 
     "layout_name_for_devise" 
    else 
     "application" 
    end 
    end 
end 

這將使如果用戶沒有登錄,則將用戶指向sessions#landing,這意味着要在自定義設計會話控制器中創建新操作

這會干擾確定如果他們是否已登錄(如果他們沒有登錄,他們可以看到sessionregistrations Devise的控制器的靜態視圖