2012-03-28 76 views
2

在這裏我有一個控制器的4個行動,我想申請應用程序佈局(默認佈局)只有新的行動,或換句話說,我想除了只有索引行動從佈局,所以我寫這個但它不起作用,索引模板正在使用佈局進行渲染。渲染布局的具體行動

class SessionsController < ApplicationController 

    layout 'application', :except => :index 

    def index 
    end 

    def new 
    end 


    def create 
     end 
    end 

    def destroy 
    end 

end 

也是我試圖

layout 'application', :only => :new 

,但它不工作過,其中指數模板與佈局呈現同樣的問題。 有什麼建議這裏有什麼問題?

回答

3

您可以創建一個方法來定義你的佈局,只有在新的行動解決您的佈局

layout :my_layout 

def my_layout 
    params[:action] == 'new' ? 'application' : nil 
end 
+0

嗯,它的工作原理!但你有什麼想法爲什麼佈局'應用程序',:除了=>:索引不起作用? btw這種方式 佈局'假',:除了=>:新 作品 – Azzurrio 2012-03-28 08:23:06

+1

我認爲這是因爲在我的情況下,我修復佈局在所有情況下,而不是新的行動。但是使用:除了或者:只是,它是在其他情況下使用的繼承佈局。 – shingara 2012-03-28 08:30:09

1

這裏的代碼,你可以在你的控制器使用方法:

layout :resolve_layout 
... 
... 

private 

def resolve_layout 
    if %w(index show).include?(action_name) 
    "application" 
    elsif %w(show).include?(action_name) 
    "admin" 
    else 
    "generic" 
end 

基本上,治療那些陣列作爲你的:只有當你給它們佈置的語句,如果它們與當前action_name相比被評估爲真。

編輯:我忘了提及,這允許:只有,:除了,等等