¿Ya no funciona "views/layout/applicati on.rhtml"?

Hola, acabo de empezar una aplicación Rails. Prácticamente me voy
basando en
otra que hice hace tiempo y digamos que sólo cambia la versión de Rails.

El caso es que he creado “views/layout/application.rhtml” con un
contenido tal
que:

MyApp <%= stylesheet_link_tag 'my_app' %>

My App

<%= flash[:notice] %>

<%= yield %>

Y el caso es que ahora al visualizar un view de cualquier controlador no
se
visualiza “por encima” este application.rhtml como hacía en mi otra
aplicación.

Simplemente: ¿ha cambiado algo al respecto?

Gracias.

Iñaki Baz C. wrote:

El caso es que he creado “views/layout/application.rhtml” con un

Observo que tienes views/layout y debe ser en plural views/layouts

Saludos

Jaime Mora R.

El Jueves, 18 de Octubre de 2007, Iñaki Baz C. escribió:

Y el caso es que ahora al visualizar un view de cualquier controlador no se
visualiza “por encima” este application.rhtml como hacía en mi otra
aplicación.

Simplemente: ¿ha cambiado algo al respecto?

Vale, perdón, no había mirado bien lo que hice.
Me faltaba poner:
render :layout => ‘application’
en cada método del controlador que visualiza algo.

El Jueves, 18 de Octubre de 2007, Iñaki Baz C. escribió:

en cada método del controlador que visualiza algo.
De todas formas, ya puestos… ¿no hay alguna forma de no tener que
añadir
render :layout => ‘application’
para cada método?

O sea, que por defecto visualice el applicacion.rhtml excepto si se lo
especifico.

Gracias, a ver si me vuelvo a leer el “Web D. With Rails” que
lo
tengo bastante olvidado. Por cierto, ha salido la segunda edición, ¿hay
algún
cambio “vital” debido también ha cambios de versiones de Rails?

Gracias.

El Jueves, 18 de Octubre de 2007, Jaime Mora R. escribió:

Iñaki Baz C. wrote:

El caso es que he creado “views/layout/application.rhtml” con un

Observo que tienes views/layout y debe ser en plural views/layouts

No no, fue una errata al escribir, en realidad lo tengo bien :wink:

El Jueves, 18 de Octubre de 2007, Iñaki Baz C. escribió:

De todas formas, ya puestos… ¿no hay alguna forma de no tener que añadir
render :layout => ‘application’
para cada método?

O sea, que por defecto visualice el applicacion.rhtml excepto si se lo
especifico.

En fin, me suele pasar que en cuanto pregunto algo doy yo mismo con la
solución:

class DomainController < ApplicationController

layout “application”

En application.rb agrega

layout :application

Que de hecho deberia ser el valor por defecto. Que version de rails
estas usando?

– via blackberry

El Jueves, 18 de Octubre de 2007, Jaime Mora R. escribió:

controlador llamado ProductoController, Rails primeramente buscará el
layout app/views/layouts/producto.rhtml,

para todos los controladores
que no tengas definido un layout, por convención Rails buscará
app/views/layouts/application.rhtml.

Ahh, ahora entiendo, el scalffold crea también un layout para
controlador, por
eso no me funciona salvo que haga ‘layout “applicacion”’ en cada
controlador !!

Pues nada, me cargo pero ya los layouts de los controladores que no los
quiero
para nada.

Espero te sirva.

Muchísimo, no había caído en lo de los layouts por controlador. Muchas
gracias :slight_smile:

Iñaki Baz C. wrote:

en cada método del controlador que visualiza algo.
De todas formas, ya puestos… ¿no hay alguna forma de no tener que
añadir
render :layout => ‘application’
para cada método?

No es necesario. Rails por convención primeramente busca un layout
basandose en el nombre del controlador, por ejemplo si tienes un
controlador llamado ProductoController, Rails primeramente buscará el
layout app/views/layouts/producto.rhtml, para todos los controladores
que no tengas definido un layout, por convención Rails buscará
app/views/layouts/application.rhtml. También puedes sobre-escribir
(override) este comportamiento por controlador ó bien por acción ya sea
creando archivos adicionales ó bien llamando al método layout cómo lo
estás haciendo.

Espero te sirva.
Saludos.

Jaime Mora R.

On 10/18/07, Iñaki Baz C. [email protected] wrote:

Ahh, ahora entiendo, el scalffold crea también un layout para controlador, por
eso no me funciona salvo que haga ‘layout “applicacion”’ en cada
controlador !!

Eso es lo que te estaba por decir :slight_smile:

Podrías modificar el generador de scaffold para que no cree esos
molestos ficheros…

El Viernes, 19 de Octubre de 2007, Damian J.
escribió:> On 10/18/07, Iñaki Baz C. [email protected] wrote:

Ahh, ahora entiendo, el scalffold crea también un layout para
controlador, por eso no me funciona salvo que haga ‘layout “applicacion”’
en cada controlador !!

Eso es lo que te estaba por decir :slight_smile:

Podrías modificar el generador de scaffold para que no cree esos
molestos ficheros…

Bueno, no es para tanto. Lo que realmente me gustaría es alguna forma de
pasar
al scaffold (o al generador de modelos) un parámetro con el nombre de la
tabla (cuando no cumple con la lógica railiana).

Por ejemplo ayer hice varios scaffolds sobre tablas con nombre en
singular y
para ello tuve que renombrarlas antes de hacerlos y posteriormente
volver a
renombrarlas e incluir en cada modelo:

def self.table_name() “nombre_tabla_real” end

Pero no he visto forma. Bueno, tampoco es tan traumático, se hace una vez
(veces) y punto.

:wink: