2009-12-09 4 views
0

Est-il possible d'affecter automatiquement un modèle de modèle spécifié à un contrôleur particulier et à toutes les ressources imbriquées dans celui-ci, comme indiqué dans routes.rb? Cette disposition doit appliquer uniquement les vues de contrôleur spécifiées et celles imbriquées dans celle-ci; il n'a pas besoin d'être appliqué à toutes les vues de l'application, comme le ferait application.html.erb (j'utilise en fait la disposition spécialisée avec la disposition de l'application pour une mise en page imbriquée).Mise en page imbriquée pour les ressources imbriquées dans les rails

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 news.html.erb mise en action. A partir de maintenant, je ne le fais pas.

Je ne veux évidemment pas recréer le même fichier de disposition pour chaque contrôleur imbriqué dans le parent (même si je voudrais sortir la viande de la mise en page et la mettre dans une partie partagée). Je suis encore moins excité de spécifier le modèle de disposition dans les contrôleurs spécifiques eux-mêmes (cet exemple spécifique est une sorte de chose temporaire, bien que j'aurai un «vrai» cas d'utilisation pour cela un peu plus loin).

Merci!

Répondre

1

Modification de la question initiale de clarté (les réponses ne sont pas tout à fait le problème central répondent), je réalise 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 facilite la résolution du problème central, mais il corrige d'autres choses qui me harcelaient.

(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.)

0

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 views/articles (en supposant la disposition par défaut) et non un fichier news.html.erb. Vous devrez vous assurer que votre variable d'instance @news est définie et que votre for_for sera pour [@news, @article] au lieu de simplement @article.

De même, vous n'avez pas besoin de créer une mise en page pour chaque contrôleur, vous pouvez créer un fichier application.html.erb dans votre dossier Layouts et tous les contrôleurs qui n'ont pas de disposition dans le dossier Layouts utiliseront l'application. html.erb et vous n'avez pas à le spécifier dans vos contrôleurs, il suffit de supprimer la mise en page avec le même nom que le contrôleur.

+0

Le fichier « news.html.erb » auquel je référé n'existe pas réellement dans mon projet; Je continuais juste à partir de l'exemple montré dans les guides Rails (voir le lien dans le message original). Le problème ici n'est pas de créer une mise en page générale pour toutes mes vues; le problème consiste à utiliser une disposition imbriquée dans le fichier application.html.erb existant. Si vous jetez un oeil à l'article de références, l'idée est expliquée plus en détail. Encore une fois, pour clarifier, j'ai un fichier application.html.erb imbriqué avec un second fichier de mise en page. Je souhaite que la combinaison des dispositions imbriquées apparaisse pour plusieurs contrôleurs. – tmo256

0

« 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 simplement ce que vous faites. C'est une ligne de code DSL, spécialement créée à cet effet. Pas maladroit.

class ArticlesController < ActionController::Base 
    layout :news 
end 
+0

Encore une fois, je pense que la question centrale est perdue. J'ai une disposition d'application standard qui est utilisée sur toutes les pages, et j'ai une mise en page secondaire que j'utilise avec elle pour les mises en page imbriquées.Ce que je voudrais, c'est que toutes les ressources imbriquées dans une ressource particulière utilisent le modèle de mise en page imbriqué. Merci! – tmo256

+0

C'est exactement ce que cela ferait ... – MattMcKnight