2010-01-20 14 views
16

Meine app/views/layouts Ordner sieht wie folgt aus:ein Layout für bestimmte Aktionen festlegen?

application.html.erb 
user_sessions.html.erb 
errors.html.erb 

Diese funktionieren gut und ich habe keine Probleme mit ihnen, aber id jetzt ein neues Layout für Tipps hinzufügen möchten, aber nur auf den Index und zeigen Aktionen .

Würde "tips.index.html.erb" funktionieren?

Antwort

32

ein neues Layout hinzufügen, wie Sie ‚tips.html.erb‘

Im Spitzen-Controller fügen Sie den folgenden genannt wie:

layout "tips", :only => [ :index, :show ] 

Sie das Layout für eine bestimmte Aktion festlegen können:

def new 
    render(:layout => "layouts/application") 
end 

Ich habe noch nie versucht, mehrere Layout-Deklarationen in einem Controller zu verwenden. Es könnte sein, dass eine weitere Zugabe

layout "standard", :only => [ :new, :edit ] 

funktionieren könnte ...

+0

mit der neuen/bearbeitet Verwendung keine Layout-Datei. – Arcath

+0

Ich habe meine Antwort aktualisiert - hoffe, das funktioniert! – dtt101

+0

Es ist erwähnenswert, dass Sie 'Layout' im Controller nicht mehrfach aufrufen können, da nur der letzte Aufruf ausgewertet wird. Stattdessen (in Schienen 4 unter am wenigsten) können Sie 'layout' aufrufen und das Symbol einer Methode übergeben. Die Methode kann dann dynamisch verschiedene Vorlagennamen zurückgeben. Siehe [Layout] (http://api.rubyonrails.org/classes/AbstractController/Layouts/ClassMethods.html#method-i-layout). –

4

Wenn Sie mehrere Layout in einem Controller verwenden möchten, verwenden Sie den Code unten: (aktions ist eine vordefinierte Variable, die Sie verwenden können direkt in Rails)

class OrdersController < BaseController 
    layout :determine_layout 

private 
    def determine_layout 
    %w(new).include?(action_name) ? "some_layout" : "public" 
    end 
end 

siehe: https://stackoverflow.com/a/5525014/445908

Verwandte Themen