Question

Est-il possible d'affecter automatiquement un modèle de mise en page spécifiée à un contrôleur particulier et toutes les ressources imbriquées à l'intérieur, comme spécifié dans routes.rb? Cette disposition devrait appliquer uniquement les vues du contrôleur spécifié et les imbriquée dans cette; il n'a pas besoin d'être appliqué à chaque point de vue de l'application, comme le ferait application.html.erb (j'utilise en fait la mise en page spécialisée avec la mise en page de demande de mise en page imbriquée).

Ainsi, par exemple, si j'avais

map.resources :news, :shallow => true do |n|
  n.resources :articles do |a|
    a.resources :comments
  end
end

quand je visite une URL comme localhost/news/1/articles/new je devrais voir ma mise en page de news.html.erb en action. A partir de maintenant, je ne sais pas.

Je ne veux évidemment pas de recréer le même fichier de configuration pour chaque contrôleur imbriqué dans le parent (même si je retirer la viande la mise en page et le mettre dans une partie commune). Je suis encore moins ravie de préciser le modèle de mise en page dans les contrôleurs spécifiques eux-mêmes (cet exemple spécifique est une sorte d'une chose temporaire, bien que je vais avoir un cas d'utilisation « réel » pour un peu plus loin sur la route).

Merci!

Était-ce utile?

La solution

Modification de la question initiale de clarté (les réponses ne sont pas tout à fait le problème central répondent), je me suis rendu ce que je dois faire est d'avoir les classes de contrôleur imbriqués héritent du parent de haut niveau. Non seulement cela rend la résolution de la question centrale plus facile, il corrige quelques autres choses qui ont été me lancinante.

(je dirais « a'doy » mais il y a d'autres qui travaillent sur cette application, qui obscurci ce qui serait normalement un peu plus évident.)

Autres conseils

Pour votre problème news.html.erb, est-ce une faute de frappe? Vous devriez voir votre fichier new.html.erb qui se trouve dans votre dossier vues / articles (en supposant la mise en page par défaut) et non un fichier news.html.erb. Vous devez vous assurer que votre variable @news d'instance est définie et votre form_for sera pour [@news, @article] au lieu d'@article.

, vous n'avez pas également de créer une mise en page pour chaque contrôleur, vous pouvez créer un application.html.erb dans le dossier layouts et tous les contrôleurs qui ne disposent pas d'une mise en page dans le dossier layouts utilisera application.html .erb et vous n'avez pas de le spécifier dans vos contrôleurs, retirez simplement la mise en page avec le même nom que le contrôleur.

« Je suis encore moins ravie de préciser le modèle de mise en page dans les contrôleurs eux-mêmes »

Il n'y a aucune raison de vous inquiéter à ce sujet. C'est tout simplement ce que vous faites. Il est une ligne de code DSL, spécialement créé à cet effet. Pas maladroits.

class ArticlesController < ActionController::Base
  layout :news
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top