Ich verwende für einige Aktionen ein anderes Layout (hauptsächlich für die neue Aktion in den meisten Controllern).
Ich frage mich, wie ich das Layout am besten festlegen kann. (Ich verwende 3 oder mehr verschiedene Layouts in demselben Controller.)
Ich benutze es nicht gerne
render: layout => 'name'
Ich habe es gern gemacht
Layout 'Name' ,: nur => [: neu]
Aber ich kann das nicht verwenden, um zwei oder mehr verschiedene Layouts anzugeben.
Beispielsweise:
Wenn ich das Layout zweimal im selben Controller mit unterschiedlichen Layoutnamen und unterschiedlichen Optionen aufrufe, wird der erste ignoriert - diese Aktionen werden in dem von mir angegebenen Layout nicht angezeigt.
Hinweis: Ich verwende Rails 2.
ruby-on-rails
mrbrdo
quelle
quelle
Antworten:
Sie können eine Methode verwenden, um das Layout festzulegen.
quelle
layout Proc.new{ ['index', 'new', 'create'].include?(action_name) ? 'some_layout' : 'other_layout' }
Wenn Sie nur zwischen zwei Layouts auswählen, können Sie Folgendes verwenden
:only
:oder
quelle
(I am using 3 or more different layouts in the same controller)
. Diese Antwort erlaubt ein Layout und kein Layout, keine unterschiedlichen Layouts.Sie können das Layout für eine einzelne Aktion mit reply_to angeben :
quelle
layout "[...]" to the controller class only allows one statement effectively. If you have more than two layouts to deal with (say, admin, generic_app, tailored_app), you will experience
und / oder Umleiten wurde in diesen Aktionsfehlern mehrmals aufgerufen. und Sie haben keine andere Wahl, als diesen Vorschlag zu verwenden.format.html { render 'custom_index', layout: 'application' }
auf die gleiche Weise.Sie können das Layout für die Aktion auch mithilfe von Rendern angeben:
quelle
Dafür gibt es ein Juwel (layout_by_action) :)
https://github.com/barelyknown/layout_by_action
quelle
Verschiedene Möglichkeiten, das Layout unter dem Controller festzulegen:
Im folgenden Code wird das Layout application_1 unter index und show action des Users Controllers aufgerufen, und das Anwendungslayout (Standardlayout) wird für andere Aktionen aufgerufen.
Im folgenden Code wird das Layout application_1 für alle Aktionen des Users-Controllers aufgerufen.
Im folgenden Code wird das Layout application_1 nur für Testaktionen der Benutzercontroller und für alle anderen Aktionen aufgerufen. Das Anwendungslayout (Standard) wird aufgerufen.
quelle
Präzision:
Ein nicht wirklich, aber trockener Weg ist das, was Sie oben sehen, aber mit einer Präzision: Das Layout muss nach Ihren Variablen sein, damit es funktioniert ("@some"). Wie :
Und nicht :
Wenn Sie eine before_action ausführen, funktioniert dies auch nicht.
Ich hoffe es hilft.
quelle