2012-03-28 12 views
2

Hier habe ich einen Controller mit 4 Aktionen und ich möchte Anwendungslayout (das Standardlayout) nur auf neue Aktion anwenden, oder mit anderen Worten, ich möchte nur Index Aktion aus dem Layout, also schreibe ich dies aber es funktioniert nicht, die Indexvorlage wird mit dem Layout gerendert.Rendering Layout für bestimmte Aktionen

class SessionsController < ApplicationController 

    layout 'application', :except => :index 

    def index 
    end 

    def new 
    end 


    def create 
     end 
    end 

    def destroy 
    end 

end 

auch versuchte ich

layout 'application', :only => :new 

aber es auch nicht funktioniert, gleiches Problem, das die Index-Vorlage wird mit Layout-Rendering. irgendwelche Vorschläge, was ist das Problem hier?

Antwort

3

Sie eine Methode erstellen können Ihr Layout zu definieren und Ihr Layout fixieren nur auf neue Aktion

layout :my_layout 

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

Nun, es funktioniert !! aber hast du eine ahnung warum Layout 'application',: except =>: index funktioniert nicht ?? BTW so Layout 'falsch',: außer =>: neu funktioniert auch – Azzurrio

+1

ich denke, es ist, weil ich in meinem Fall Layout auf Null in allen Fällen statt neuer Aktion zu beheben. Bei der Verwendung von: except oder: only handelt es sich jedoch um das geerbte Layout, das in anderen Fällen verwendet wird. – shingara

1

Hier ist Code, den Sie in Ihren Controller verwenden können:

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 

Grundsätzlich behandeln diese Arrays als Ihre: nur Anweisungen für das Layout, das Sie ihnen geben, wenn sie im Vergleich zum aktuellen action_name als wahr ausgewertet werden.

EDIT: Ich habe vergessen zu erwähnen, dass dies erlaubt: nur,: außer, etc.

Verwandte Themen