J'utilise une disposition différente pour certaines actions (principalement pour la nouvelle action dans la plupart des contrôleurs).
Je me demande quelle serait la meilleure façon de spécifier la mise en page? (J'utilise 3 mises en page différentes ou plus dans le même contrôleur)
Je n'aime pas utiliser
render: layout => 'nom'
J'aimais faire
layout 'name',: only => [: new]
Mais je ne peux pas utiliser cela pour spécifier 2 ou plusieurs mises en page différentes.
Par exemple:
Lorsque j'appelle la mise en page 2 fois dans le même contrôleur, avec des noms de mise en page différents et des options uniquement différentes, la première est ignorée - ces actions ne s'affichent pas dans la mise en page que j'ai spécifiée.
Remarque: j'utilise Rails 2.
ruby-on-rails
mrbrdo
la source
la source
Réponses:
Vous pouvez utiliser une méthode pour définir la mise en page.
la source
layout Proc.new{ ['index', 'new', 'create'].include?(action_name) ? 'some_layout' : 'other_layout' }
Si vous ne sélectionnez qu'entre deux mises en page, vous pouvez utiliser
:only
:ou
la source
(I am using 3 or more different layouts in the same controller)
. Cette réponse permet une mise en page et aucune mise en page, pas des mises en page différentes.Vous pouvez spécifier la disposition d'une action individuelle à l'aide de respond_to :
la source
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
rendu et / ou la redirection était appelé plusieurs fois dans les erreurs de cette action; et vous n'avez pas d'autre choix que d'utiliser cette suggestion.format.html { render 'custom_index', layout: 'application' }
de la même manière.Vous pouvez également spécifier la disposition de l'action à l'aide du rendu:
la source
Il y a un petit bijou (layout_by_action) pour ça :)
https://github.com/barelyknown/layout_by_action
la source
Différentes manières de spécifier la disposition sous le contrôleur:
Dans le code suivant, la mise en page application_1 est appelée sous index et l'action show du contrôleur Utilisateurs et la mise en page de l'application (mise en page par défaut) est appelée pour d'autres actions.
Dans le code suivant, la disposition application_1 est appelée pour toutes les actions du contrôleur Utilisateurs.
Dans le code suivant, la disposition application_1 est appelée pour l'action de test des contrôleurs Utilisateurs uniquement et pour toutes les autres actions, la disposition d'application (par défaut) est appelée.
la source
Précision :
Une manière DRY pas vraiment mais qui fonctionne est ce que vous voyez ci-dessus, mais avec une précision: la mise en page doit être après vos variables pour fonctionner ("@some"). Comme:
Et pas :
Si vous faites une before_action ... cela ne fonctionnera pas non plus.
J'espère que ça aide.
la source