2012-06-18 138 views
9

我試圖讓設計從某些方面的默認顯示不同的佈局模板。更改設計的默認佈局

當用戶轉到登錄頁面時,我有這個工作,但我需要顯示不同的佈局註冊,忘記密碼和重置。

這是我的應用程序控制器當前代碼:

layout :layout 

    private 
    def layout 
    # only turn it off for login pages: 
    is_a?(Devise::SessionsController) ? "login" : "application" 
    # or turn layout off for every devise controller: 
    #devise_controller? && "application" 
    end 

回答

25

如果您將替代佈局命名爲devise.html.erb,那麼該寶石的控制器將自然使用它,而不需要詢問。保存一些代碼。

+0

以下是顯示實現此目的所有可能方法的文檔:https://github.com/plataformatec/devise/wiki/How-To:-Create-custom-layouts – akz92

3

你不需要通過你的自我處理的佈局,只是做:

rails generate devise:views 

然後,看色器件文件夾在視圖文件夾中,您將看到您需要自定義的所有表單

+0

做到了這一點,但它仍然使用我的應用程序模板,有些信息我不想在用戶登錄之前顯示。其視圖不是這樣的,它的視圖在 –

+0

內呈現的佈局與我一樣,我不必觸摸佈局,我所做的只是rails生成設計:視圖,然後,我自定義生成的視圖很容易,這是呈現在默認產量 – simo

30

將以下代碼行添加到您的application.rb中:

config.to_prepare do 
    Devise::SessionsController.layout "your_layout_name" 
    Devise::RegistrationsController.layout "your_layout_name" 
    Devise::ConfirmationsController.layout "your_layout_name" 
    Devise::UnlocksController.layout "your_layout_name" 
    Devise::PasswordsController.layout "your_layout_name" 
end 

如果你想對所有相同的佈局設計的看法,除了當用戶正在編輯的數據,你可以有這樣的事情:

config.to_prepare do 
    Devise::SessionsController.layout "your_layout_name" 
    Devise::RegistrationsController.layout proc{ |controller| user_signed_in? ? "application" : "your_layout_name" } 
    Devise::ConfirmationsController.layout "your_layout_name" 
    Devise::UnlocksController.layout "your_layout_name"    
    Devise::PasswordsController.layout "your_layout_name"   
end 

欲瞭解更多信息,你可以閱讀這個article

+0

唯一的問題與上面的代碼是registrationscontroller也將效果當一個有效的登錄用戶編輯有密碼 –

+0

我更新了我的答案 – zolter

+0

,看起來它可能會做的伎倆,謝謝zolter :) –