Frage

Ist es möglich, eine bestimmte Layout-Vorlage zu einem bestimmten Controller automatisch zuweisen und alle Ressourcen in sich verschachtelt, wie in routes.rb angegeben? Das Layout sollte nur die angegebenen Controller Ansichten gilt und die in ihn verschachtelt; es muss nicht innerhalb der Anwendung auf jede Ansicht angewandt werden, da application.html.erb würde (ich das Fach Layout mit der Anwendung Layout für eine verschachtelte Layout mit eigentlich bin).

So zum Beispiel, wenn ich

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

, wenn ich eine URL wie localhost/news/1/articles/new besuchen soll ich mein news.html.erb Layout in Aktion sehen. Ab jetzt kann ich nicht.

Ich möchte natürlich nicht das gleiche Layout-Datei für jeden Controller innerhalb des übergeordneten verschachtelt neu erstellen (auch wenn ich das Fleisch, das Layout herausziehen würde und steckte es in eine teilweise gemeinsam). Ich bin noch weniger begeistert über die Layout-Vorlage in dem spezifischen Controller spezifiziert selbst (dieses spezielle Beispiel ist ein bisschen eine vorübergehende Sache, obwohl ich eine ‚echte‘ Use-Case für diesen etwas weiter unten an der Straße haben werde).

Danke!

War es hilfreich?

Lösung

die ursprüngliche Frage für Klarheit bearbeiten (die Antworten waren nicht ganz das zentrale Problem zu beantworten), erkannte ich, was ich tun muss, ist die verschachtelten Controller-Klassen von der obersten Ebene Eltern erben haben. Nicht nur, dass diese machen die zentrale Frage der Lösung einfacher, es behebt ein paar andere Dinge, die mich haben quälende.

(Ich würde sagen, „a'doy“, aber es gibt andere, auf dieser App arbeiten, das, was verdeckt würde normalerweise ein bisschen mehr offensichtlich.)

Andere Tipps

Für Ihr news.html.erb Problem ist, dass ein Tippfehler? Sie sollten Ihre new.html.erb-Datei, die (unter der Annahme, Standard-Layout) in Ihren Ansichten / Artikel-Ordner ist und nicht eine news.html.erb Datei. Sie werden sicher Ihre @news Instanz-Variable gesetzt und Ihre form_for machen müssen sein für [@news, @article] statt nur @article.

Auch Sie haben kein Layout für jeden Controller zu erstellen, können Sie eine application.html.erb in Ihren Layout Ordner erstellen und alle Controller, die application.html kein Layout im Layout Ordner hat verwenden .erb und Sie müssen es nicht in Ihrem Controller angeben, entfernen Sie einfach das Layout mit dem gleichen Namen wie die Steuerung.

" Ich bin noch weniger begeistert über die Layout-Vorlage in den Steuerungen selbst Angabe "

Es gibt keinen Grund, sich um diese zu kümmern. Dies ist einfach das, was Sie tun. Es ist eine Reihe von DSL-Code, die speziell für diesen Zweck geschaffen. Nicht klobig.

class ArticlesController < ActionController::Base
  layout :news
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top