Domanda

E 'possibile assegnare automaticamente un modello di layout specifico per un particolare controller e tutte le risorse nidificate al suo interno, come specificato nel routes.rb? Questa disposizione dovrebbe applicare solo le opinioni controllore specificati e quelli annidato all'interno di esso; esso non ha bisogno di essere applicato ad ogni vista all'interno dell'applicazione, come farebbe application.html.erb (In realtà sto usando il layout specializzato con il layout dell'applicazione per un layout nidificato).

Quindi, per esempio, se avessi

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

quando visito un URL come localhost/news/1/articles/new dovrei vedere il mio layout news.html.erb in azione. A partire da ora, non lo faccio.

Io, ovviamente, non voglio ricreare lo stesso file di layout per ciascun controller nidificato all'interno del genitore (anche se avrei tirare fuori la carne il layout e metterlo in un parziale in comune). Sono ancora meno entusiasta di specificare il modello di layout negli specifici controllori stessi (questo esempio specifico è una specie di una cosa temporanea, anche se avrò un caso d'uso 'reale' per questo un po 'più in basso la strada).

Grazie!

È stato utile?

Soluzione

Modifica la domanda iniziale per chiarezza (le risposte non sono state del tutto rispondendo il problema centrale), mi sono reso conto che cosa devo fare è di avere le classi controller nidificati ereditano dal genitore di livello superiore. Non solo questo make risolvere la questione centrale più facile, fissa alcune altre cose che mi sono state fastidioso.

(direi "a'doy", ma ce ne sono altri che lavorano su questa applicazione, che oscurava quello che normalmente sarebbe un po 'più evidente.)

Altri suggerimenti

Per il vostro problema news.html.erb, è che un errore di battitura? Si dovrebbe vedere il file new.html.erb che è nella cartella views / articoli (supponendo layout predefinito) e non un file news.html.erb. Dovrete fare in modo sia impostato la variabile @news istanza e la tua form_for sarà per [@news, @article] invece di appena @article.

Inoltre, non c'è bisogno di creare un layout per ogni controller, è possibile crearne uno application.html.erb nella cartella layout e tutti i controllori che non hanno un layout nella cartella layout utilizzerà application.html .erb e non c'è bisogno di specificarlo nel vostro controller, basta rimuovere il layout con lo stesso nome del controller.

" Sono ancora meno entusiasti su come specificare il modello di layout nei controllori stessi "

Non c'è motivo di preoccuparsi di questo. Questo è semplicemente ciò che si fa. E 'una linea di codice DSL, creato appositamente per questo scopo. Non goffo.

class ArticlesController < ActionController::Base
  layout :news
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top