2011-01-29 38 views
1

我知道如何爲devise指定一個佈局文件。但我不明白的是這是如何工作。具體來說,在下面的代碼中,如果它是設計控制器,則使用我的layout_name_for_devise。所以我認爲這意味着如果它不是一個設計控制器(在我的情況下是app/views/layouts/application.html.haml),就會使用「應用程序」佈局。現在,我有其他佈局,例如一個叫做home的佈局。我認爲我的觀點使用我的home佈局會打破......但事實證明它工作正常。 我不明白這是如何工作的。例如,當下面的代碼運行時,我的app/views/layouts/home.html.haml佈局仍然被正確調用?在rails中爲devise gem指定一個佈局文件(這是做什麼的?)

class ApplicationController < ActionController::Base 
    layout :layout_by_resource 

    protected 

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

回答

3

良好的夜間休息對大腦有益無害。所以我醒來後才明白這是如何工作的......但也因爲沒有看到它而感到無聊。

tl; dr - 此代碼位於application控制器內部。其他控制器不調用此代碼。這就是它正常工作的原因。

再回應:

的Rails試圖找到基於控制器名稱的佈局。如果佈局不存在,則導軌將使用application佈局。

所以在我的Home控制器導軌首先尋找一個home佈局。由於有一個它使用該佈局。

我不確定什麼設計,但它不尋找名爲devise的佈局,所以它使用application佈局。這就是上面代碼的運行時間。由於控制器是設計控制器,因此佈局將更改爲「layout_name_for_devise」。

+0

只要繼續並接受你自己的答案:)感謝您的方式信息! – murrekatt 2011-09-24 17:46:57

相關問題