Introducción a Ruby on Rails

Capítulo 4. Hola, Rails!

Para comenzar, vamos a mostrar algo de texto en la pantalla rápidamente. Para hacer ésto, necesitas tener tu servidor de aplicación Rails corriendo.

4.1. Iniciando el Servidor Web

En realidad ya tienes una aplicación Rails funcional, Para verla, necesitas iniciar un servidor web en tu máquina de desarrollo. Puedes hacerlo ejecutando:

$ rails server

Truco Compilar CoffeeScript a JavaScript requiere de herramientas adicionales. Si no dispones de ellas, verás un error de tipo execjs. Normalmente Mac OS X y Windows ya incluyen estas utilidades. Rails agrega la gema therubyracer al Gemfile en una línea comentada para nuevas aplicaciones y puedes descomentarla si la necesitas.

therubyrhino es el runtime de JavaScript recomendado para usuarios de JRuby y es añadido por defecto al Gemfile en aplicaciones generadas bajo JRuby. Puedes investigar acerca de todos los runtimes soportados en ExecJS.

Esto lanzará WEBrick, un servidor web incorporado en Ruby por defecto. Para ver tu aplicación en acción, abre tu navegador preferido y accede a http://localhost:3000. Deberías ver la página de información por defecto de Rails.

Página de bienvenida de Rails

Figura 4.1 Página de bienvenida de Rails

Truco Para detener el servidor web, presiona Ctrl+C en la ventana de la línea de comandos donde se está ejecutando. En modo de desarrollo, Rails generalmente no requiere reiniciar el servidor web; los cambios realizados serán tomados automáticamente por el servidor.

La página "Welcome Aboard" es la primera prueba para una nueva aplicación Rails: Ésta asegura que tienes el software configurado correctamente para servir una página. También puedes hacer click en el link About your application's enviroment para ver un resumen del entorno de tu aplicación.

4.2. Hola Mundo

Para conseguir que Rails diga "Hola", necesitas crear como mínimo un controlador y una vista.

El propósito de un controlador es recibir las peticiones (requests) de la aplicación. El enrutamiento (routing) decide qué controlador recibe qué petición.

A menudo, hay más de una ruta para cada controlador, y diferentes rutas pueden ser servidas por diferentes acciones (actions). El propósito de cada acción es obtener información para pasarla después a la vista.

El propósito de una vista es mostrar la información en un formato legible para los humanos. Una distinción importante que hacer es que es el controlador, y no la vista, donde la información es recolectada. La vista sólo debería mostrar la información. Por defecto, las plantillas de las vistas están escritas en un lenguaje llamado ERB (del inglés, Embedded Ruby), que se procesa automáticamente para cada petición servida por Rails.

Para crear un nuevo controlador, necesitas ejecutar el generador de controladores y decirle que quieres un controlador llamado por ejemplo welcome con una acción llamada index. Para ello, ejecuta lo siguiente:

$ rails generate controller welcome index

Rails creará una serie de archivos y añadirá una ruta por ti.

create  app/controllers/welcome_controller.rb
 route  get "welcome/index"
invoke  erb
create    app/views/welcome
create    app/views/welcome/index.html.erb
invoke  test_unit
create    test/functional/welcome_controller_test.rb
invoke  helper
create    app/helpers/welcome_helper.rb
invoke    test_unit
create      test/unit/helpers/welcome_helper_test.rb
invoke  assets
invoke    coffee
create      app/assets/javascripts/welcome.js.coffee
invoke    scss
create      app/assets/stylesheets/welcome.css.scss

Los archivos más importantes de éstos son por supuesto el controlador, que se encuentra en app/controllers/welcome_controller.rb y la vista, que se encuentra en app/views/welcome/index.html.erb.

Abre el archivo app/views/welcome/index.html.erb en tu editor de texto y edítalo para que contenga sólo está línea de código:

<h1>Hello, Rails!</h1>

4.3. Estableciendo la página principal

Ahora que hemos hecho el controlador y la vista, necesitamos decirle a Rails cuándo queremos que se muestre Hello Rails. En nuestro caso, deseamos mostrarlo al acceder a la portada de nuestro sitio, http://localhost:3000. Por el momento, sin embargo, la página "Welcome Aboard" está ocupando ese lugar.

Para arreglarlo, borra el archivo index.html ubicado dentro de la carpeta public de la aplicación.

Necesitas hacer ésto debido a que Rails servirá preferentemente cualquier archivo estático en la carpeta public que coincida con una ruta de la aplicación.

El archivo index.html es especial, ya que se sirve si llega una petición a la ruta raíz de la aplicación (en http://localhost:3000). Si haces otra petición (por ejemplo http://localhost:3000/welcome), se serviría el archivo estático public/welcome.html, pero sólo si existiera.

A continuación, tienes que indicarle a Rails donde está ubicada tu página principal. Para ello, abre el archivo config/routes en tu editor:

Blog::Application.routes.draw do
  get "welcome/index"

  # The priority is based upon order of creation:
  # first created -> highest priority.
  # ...
  # You can have the root of your site routed with "root"
  # just remember to delete public/index.html.
  # root :to => "welcome#index"

Éste es el archivo de enrutamiento de tu aplicación, que mantiene entradas con un DSL especial (domain-specific language) que le dicen a Rails cómo conectar peticiones entrantes a controladores y acciones.

Este archivo contiene muchas rutas de ejemplo en líneas comentadas, y una de ellas en realidad muestra como conectar la raíz de tu sitio a un controlador y acción específicos. Encuentra la línea iniciando con root :to y descoméntala. Debería verse como lo siguiente:

root :to => "welcome#index"

El root :to => "welcome#index" le indica a Rails que debe asociar las peticiones de la raíz de la aplicación a la acción index del controlador welcome y get "welcome/index" le indica a Rails que asocie peticiones de http://localhost:3000/welcome/index a la acción index del controlador welcome. Este fue creado al inicio cuando ejecutaste el generador del controlador (rails generate controller welcome index).

Si accedes a la dirección http://localhost:3000 en tu navegador, verás el mensaje Hello, Rails! que colocaste dentro de la vista app/views/welcome/index.html.erb, indicando que esta nueva ruta está en realidad pasando a la acción index del controlador Welcome y está renderizando la vista correctamente.