Pregunta

¿Es posible asignar automáticamente una plantilla de diseño especificado a un controlador particular, y todos los recursos anidadas dentro de ella, como se especifica en routes.rb? Esta disposición debe aplicarse sólo los puntos de vista de controlador especificado y los anidado dentro de ella; no es necesario que se aplicará a todas las vistas dentro de la aplicación, tal como lo haría application.html.erb (en realidad estoy usando el diseño especializado con el diseño de la aplicación de una disposición anidada).

Así, por ejemplo, si tuviera

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

cuando visita una URL como localhost/news/1/articles/new debo ver a mi disposición news.html.erb en acción. A partir de ahora, yo no.

Yo, obviamente, no quiero volver a crear el mismo archivo de diseño para cada controlador anidado dentro de la matriz (aunque me gustaría sacar la carne de la disposición y ponerla en un parcial compartida). Estoy aún menos emocionados acerca de cómo especificar la plantilla de diseño de los propios controladores específicos (este ejemplo específico es una especie de una cosa temporal, aunque voy a tener un caso de uso 'real' para esto un poco más por el camino).

Gracias!

¿Fue útil?

Solución

Edición de la pregunta original para mayor claridad (las respuestas no fueron muy respondiendo al problema central), me di cuenta de lo que tengo que hacer es tener las clases de controlador anidados heredan de los padres de nivel superior. No sólo hace que la solución de la cuestión central más fácil, fija algunas otras cosas que me han sido plagaban.

(yo diría que "a'doy" pero hay otras personas que trabajan en esta aplicación, que oculta lo que normalmente sería un poco más evidente.)

Otros consejos

Para su problema news.html.erb, es que un error tipográfico? Debería ver su archivo new.html.erb que está en la carpeta de vistas / artículos (suponiendo diseño predeterminado) y no un archivo news.html.erb. Tendrá que asegurarse de que su variable de instancia @news se establece y su form_for será para [@news, @ article] en lugar de sólo @ article.

Además, no se tiene que crear un diseño para cada controlador, puede crear una application.html.erb en la carpeta de diseños y todos los controladores que no tienen una disposición en la carpeta de diseños utilizará application.html .erb y que no tienen que especificarlo en sus controladores, basta con retirar el diseño con el mismo nombre que el controlador.

" estoy aún menos emocionados acerca de cómo especificar la plantilla de diseño de los propios controladores "

No hay razón para preocuparse por esto. Esto es simplemente lo que haces. Es una línea de código DSL, creado específicamente para este propósito. No es torpe.

class ArticlesController < ActionController::Base
  layout :news
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top