Páginas estáticas en Rails 2

Hola a todos,

Al fin he empezado a utilizar Rails 2, y me he encontrado con un
problema: Las páginas estáticas. Y no me refiero a poner una página en
public/, sino en crear un controlador estático que me sirva páginas como
el “About Us”, “Contact”… o eso o poner un método nuevo que tire
contenido estático en un controlador ya construido.

Esto antes me funcionaba… pero ahora no. He estado buscando y no
encuentro nada. Supongo que no es cosa de Rails 2 en sí, sino de rutas.
http://www.tabernadelturco.com/2006/01/08/renderizar-paginas-estaticas-en-rails/

¿Sabéis algún sitio dónde esté explicado o sabéis cómo hacerlo?

Un saludo, y gracias por adelantado!
Juanjo.

Hombre,

siempre puedes hacerte un controlador y rellenarlo de acciones vacías,
y que cada acción se corresponda con una página estática.

No es tan elegante como el method missing pero seguro que te funciona :slight_smile:

On Dec 28, 2007 8:58 PM, Fernando B. [email protected] wrote:

On Dec 28, 2007 8:44 PM, juanjo [email protected] wrote:

tabernadelturco.com - Domain for sale!

¿Sabéis algún sitio dónde esté explicado o sabéis cómo hacerlo?

Un saludo, y gracias por adelantado!
Juanjo.

No sé si el artículo que en su día citaba Manu es muy viejo, pero
ninguna de las dos cosas hace falta! Si en el directorio de vistas
correspondiente existe una con el nombre de la acción pedida, Rails
asume una acción vacía y renderiza el template (supongo que con un
truco interno similar al method_missing que contaba Fernando en su
blog) aunque no esté definida la acción en el controlador.

Lo que te puede estar fallando es que en Rails 2 cambia el esquema de
nombres y extensiones de las vistas. En particular, si tenías uno
llamado hola.rhtml, ahora deberás tener un hola.html.erb (el esquema
general es nombre_plantilla.formato.motor_de_render, así que los
mástípicos serán cosas como hola.html.erb y hola.atom.builder; puedes
leer más detalles en cualquiera de las recopilaciones de novedades en
Rails 2 como
Ruby on Rails — Rails 2.0: It's done!).


Sergio Gil Pérez de la Manga
e-mail > [email protected]
blog > http://www.lacoctelera.com/porras

Hola,

Por supuesto, esto que comentáis lo probé y lo he probado, pero no
funciona.

Si por ejemplo, dentro del controlador Pages escribo la función vacía
aboutus:

class PagesController < ApplicationController

def aboutus
end


end

Cuando yo voy a http://localhost:3000/pages/aboutus lo que me encuentro
es un fallo:

Couldn’t find Page with ID=0

¿Por qué? Pues supongo que por las rutas de REST.

Un saludo!

El vie, 28-12-2007 a las 21:12 +0100, Sergio Gil Pérez de la Manga
escribió:

encuentro nada. Supongo que no es cosa de Rails 2 en sí, sino de rutas.
correspondiente existe una con el nombre de la acción pedida, Rails
Rails 2 como http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done).


Juan José Vidal Agustín [email protected]
Universidad de Murcia
ÁTICA - Área de Tecnologías de la Información y las Comunicaciones
Aplicadas
Proyecto SOFTLA - Software Libre y Abierto Universidad de Murcia
Edificio Ática, Campus Univ. de Espinardo
E-30100 Murcia (SPAIN)

Tlf.: +34 968 39 8741

tiene pinta de que has definido algo así en tu routes.rb:
map.resources :pages

si es así, probaste a quitarlo?

juanjo escribió:

On Dec 28, 2007 9:27 PM, juanjo [email protected] wrote:

def aboutus

¿Por qué? Pues supongo que por las rutas de REST.

Un saludo!

Totalmente.

Si tienes un map.resources :pages, http://localhost:3000/pages/aboutus
no está ejecutando la acción aboutus, sino la acción show con el
parametro id a aboutus. Me temo que no puedes mezclar las dos cosas y
tendrás que usar otro truco, aunque en cualquier caso, si dices que
las pages no van a estar en base de datos sino en templates (son
estáticas), no tiene mucho sentido que mapees el recurso, ¿no? (ni que
tengas un modelo Page, ya que estamos).


Sergio Gil Pérez de la Manga
e-mail > [email protected]
blog > http://www.lacoctelera.com/porras

On Dec 28, 2007, at 9:12 PM, Sergio Gil Pérez de la Manga wrote:

No sé si el artículo que en su día citaba Manu es muy viejo, pero
ninguna de las dos cosas hace falta! Si en el directorio de vistas
correspondiente existe una con el nombre de la acción pedida, Rails
asume una acción vacía y renderiza el template (supongo que con un
truco interno similar al method_missing que contaba Fernando en su
blog) aunque no esté definida la acción en el controlador.

Casi casi :slight_smile:

def perform_action
if self.class.action_methods.include?(action_name)
send(action_name)
default_render unless performed?
elsif respond_to? :method_missing
method_missing action_name
default_render unless performed?
elsif template_exists? && template_public?
default_render
else
raise UnknownAction, “No action responded to #{action_name}”,
caller
end
end

On Dec 28, 2007, at 9:27 PM, juanjo wrote:

def aboutus
Couldn’t find Page with ID=0

¿Por qué? Pues supongo que por las rutas de REST.

Si has declarado que PagesController es RESTful entonces has de crear
un :member

map.resources :pages, :member => { :aboutus => :get }

Aunque si solo sirve ese tipo de cosas igual acabas antes quitando eso
y dejando que se dispare la default :controller/:action, sera RESTful
igualmente.

– fxn

Hola de nuevo,

Me he decidido por hacer un controlador nuevo destinado solo a contenido
estático.

class StaticsController < ApplicationController

def perform_action
if self.class.action_methods.include?(action_name)
send(action_name)
default_render unless performed?
elsif respond_to? :method_missing
method_missing action_name
default_render unless performed?
elsif template_exists? && template_public?
default_render
else
raise UnknownAction, “No action responded to #{action_name}”,
caller
end
end

end

En las vistas (views/statics/) pongo los ficheros loquesea.html.erb y
funcionando. Eso sí, no he puesto el recurso en routes.rb

Muchas gracias a todos por la solución!

El vie, 28-12-2007 a las 15:44 -0500, Luis Felipe Hurtado C.
escribió:

    Hola,
    ...
    
    escribió:
    > >
    > > > public/, sino en crear un controlador estático que me
    http://www.tabernadelturco.com/2006/01/08/renderizar-paginas-estaticas-en-rails/
    > ninguna de las dos cosas hace falta! Si en el directorio de
    esquema de
    > Rails 2 como
    Aplicadas
    Ror-es mailing list
    [email protected]
    http://lists.simplelogica.net/mailman/listinfo/ror-es

Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Juan José Vidal Agustín [email protected]
Universidad de Murcia
ÁTICA - Área de Tecnologías de la Información y las Comunicaciones
Aplicadas
Proyecto SOFTLA - Software Libre y Abierto Universidad de Murcia
Edificio Ática, Campus Univ. de Espinardo
E-30100 Murcia (SPAIN)

Tlf.: +34 968 39 8741

Hola,

Yo no vería problema en quitar el controlador registrado como recurso de
routes.rb

Saludos,

Luis Felipe.

El día 28/12/07, juanjo [email protected] escribió:

On Dec 28, 2007 9:54 PM, juanjo [email protected] wrote:

 raise UnknownAction, "No action responded to #{action_name}",

caller
end
end

Todo este código no te hace falta! Lo que te ha copiado Xavi es el
código de Rails que hace que esa “magia” funcione (vaya, si no estoy
definitivamente tolai).


Sergio Gil Pérez de la Manga
e-mail > [email protected]
blog > http://www.lacoctelera.com/porras

On Dec 28, 2007, at 10:10 PM, Sergio Gil Pérez de la Manga wrote:

else
raise UnknownAction, “No action responded to #{action_name}”,
caller
end
end

Todo este código no te hace falta! Lo que te ha copiado Xavi es el
código de Rails que hace que esa “magia” funcione (vaya, si no estoy
definitivamente tolai).

Es correcto my friend :slight_smile:

Curiosidad …

¿Tiene sentido que una pagina “estàtica” esté definida como un
“resource”?

Francesc

On Dec 28, 2007, at 9:40 PM, Xavier N. wrote:

Aunque si solo sirve ese tipo de cosas igual acabas antes quitando eso
y dejando que se dispare la default :controller/:action, sera RESTful
igualmente.

– fxn


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


name. Francesc E. i Martí
voice. +34 678.681.603

Efectivamente.
:stuck_out_tongue:

El vie, 28-12-2007 a las 22:19 +0100, Xavier N. escribió:

elsif template_exists? && template_public?

Es correcto my friend :slight_smile:


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Juan José Vidal Agustín [email protected]
Universidad de Murcia
ÁTICA - Área de Tecnologías de la Información y las Comunicaciones
Aplicadas
Proyecto SOFTLA - Software Libre y Abierto Universidad de Murcia
Edificio Ática, Campus Univ. de Espinardo
E-30100 Murcia (SPAIN)

Tlf.: +34 968 39 8741

En realidad para mi tenía sentido pues un controlador con gran cantidad
de funciones, quería que tuviese un “método estático”. Es por ello que
ya tenía puesto dicho controlador como resource, antes de intentar lo de
las estáticas.

Un saludo!

El vie, 28-12-2007 a las 22:06 +0100, Francesc E. escribió:

Aunque si solo sirve ese tipo de cosas igual acabas antes quitando eso

name. Francesc E. i Martí
voice. +34 678.681.603


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Juan José Vidal Agustín [email protected]
Universidad de Murcia
ÁTICA - Área de Tecnologías de la Información y las Comunicaciones
Aplicadas
Proyecto SOFTLA - Software Libre y Abierto Universidad de Murcia
Edificio Ática, Campus Univ. de Espinardo
E-30100 Murcia (SPAIN)

Tlf.: +34 968 39 8741