2011-10-03 24 views

回答

2

這實際上讓我很吃驚,我不得不去源碼檢查。答案是否定的,它確實/不應該默認爲應用程序佈局。通過的條件反而被用來確定動作是否具有佈局在所有,因此混合方法action_has_layout?(Rails 3)的名稱。

我有一半希望它的行爲像respond_to,你可以多次調用以建立不同行爲的條件。

在任何情況下,您都可以通過發送一個包含您的邏輯(通過proc或符號引用方法)的方法來輕鬆處理此問題,而不是僅僅爲了呈現不同的佈局而定義空行爲。

例如:

layout :determine_layout 

... 

def determine_layout 
    # show gets application, the rest get admin 
    params[:action] == 'show' ? 'application' : 'admin' 

    # or, returning true would probably do it (and be more flexible in case 
    # the rest of your app swapped layouts to something other than application) 
    params[:action] == 'show' || 'admin' 
end 
+0

我來到這個相同的結論。我覺得這個行爲有點反直覺。感謝您的時間和幫助。 – pixelearth