Programando en Ruby on Rails (I)

Para empezar con este primer artículo, deberíamos tener instalado Ruby on Rails. Podéis seguir los pasos de un artículo anterior: Instalar Ruby on Rails en Linux

Nota: Si sólo queremos probar nuestras aplicaciones, no hace falta instalar un servidor en serio. Rails tiene un servidor web con el que podemos hacer pruebas. Podemos arrancarlo ejecutando ruby script/server en la carpeta de nuestro proyecto (por defecto en el puerto 3000).

Para los que aún no sepáis de que va el tema, Rails es un framework para desarrollar aplicaciones web en Ruby, con una velocidad pasmosa (en cuanto se domina un poco).

Rails implementa el patrón de diseño MVC (Model-View-Controller). Básicamente, podríamos decir que las "clases" de Rails se dividen en tres partes: el modelo, que contiene información sobre lo que representa la clase, el controlador, dónde se definen todas las acciones (funciones) que se pueden realizar sobre el modelo, y la vista, que es básicamente, html dónde tendremos acceso a las variables creadas en el controlador.

Por lo general, las clases (un MVC) en Rails representan una tabla de una base de datos, y aquí creo que es donde radica la potencia de RoR.

Veámoslo con un ejemplo:

Inicialmente, para crear un nuevo proyecto tan solo debemos escribir rails nombre_proyecto. Nos creará una carpeta con todos los archivos iniciales. Deberemos configurar nuestra base de datos tal y como explicaba en el artículo de instalación.

Supongamos para el ejemplo que tenemos una tabla en nuestra base de datos llamada Users, y que ésta tiene el típico campo id, un usuario, un password y un nombre.

Para crear un modelo de la tabla, simplemente deberemos ejecutar ruby script/generate model User
Comprovad que automáticamente detecta los plurales y une el modelo User con la tabla Users.

Probablemente necesitemos un controlador para nuestro modelo. Ejecutaremos ruby script/generate controller User

Puede ser interesante usar scaffold para que Rails nos cree un esqueleto de algunas funciones típicas (add, delete, modify, list) que pueden sernos útiles para empezar. Usaremos ruby script/generate scaffold User

Los archivos de la aplicación están dentro de la carpeta app/, separados por controller/, views/ y models/.

Veamos el controlador (app/controller/user_controller.rb)
Si hemos usado scaffold veremos que nos habrá creado algunas funciones, como por ejemplo list, dónde encontraremos algo por este estilo:

def list
    @users = User.find(:all)
end

La anterior función list buscará todos los usuarios de la tabla y los guardará en la variable @users (realmente, lo que hace es un select * from users)

En la definición del modelo, que inicialmente estará vacía (app/models/user.rb), podemos añadir propiedades del modelo, como por ejemplo, la restricción de que el usuario y el password no pueden estar vacíos, o que el usuario debe ser único (se comprobará automáticamente antes de hacer un insert)

class User < ActiveRecord::Base
    validates_presence_of :usuario
    validates_uniqueness_of :usuario
end


Si miramos la vista correspondiente a la acción list de user (app/views/user/list.rhtml), veremos que se usa la variable para mostrar todos los usuarios. Podríamos hacer lo siguiente:

<% for user in @users %>
    <p>Usuario: <%= user.usuario %></p>
    <p>Nombre: <%= user.nombre %></p>
    <%= link_to "Información del usuario", :controller => 'user', :action => 'info', :id => user.id %>
<% end %>


Básicamente, lo que se hace aquí es iterar sobre la variable @users, recorriendo todos los usuarios, para los que se escribe su nombre, usuario, y suponiendo que la id es 1, creando un enlace a /user/info/1

La opción find realmente es interesante, podríamos hacer cosas tales como buscar usuarios cuyo nombre sea el contenido en la variable @nombre de la siguiente forma:

    @nombre = 'rails'
    @users = User.find(:all, :conditions => ["nombre = ?", @nombre])

Esto sería equivalente a:

    @users = User.find_by_nombre(@nombre)

Sí, podemos usar cualquier campo de la tabla para el find_by.

Si quisiéramos hacer un insert la cosa sería así:

    @user = User.new(nombre => 'nombre', usuario => 'nombre', password=>'12345')
    @user.save

Parecido en el caso de querer borrar un campo:

    @user = User.find(id)
    @user.destroy

Probad alguna de éstas cosas, intentaré próximamente hacer otro artículo ampliando algo más con algunos otros ejemplos.





 


Trackback

Trackback URL for this entry:
http://www.gra2.com/trackback.php/programar-en-ruby-on-rails-parte-1

No trackback comments for this entry.

Comments

Post a comment

Preciso, conciso, buen intro.
Podrias seguir con proximos pasos para este interesante manual.

carlos on Tuesday, September 22 2009 @ 03:52 PM CEST Reply | #

Search



About

newton.gra2.com is a blog about technology, opinion and random thoughts written by Daniel Alvarez, a computer engineer currently living in Zurich, Switzerland.

Topics

News (20/0)
Manuals (24/0)
Security (7/0)
Music (3/0)
Weeklog (1/0)
Personal (34/0)
Photos (3/0)
Opinion (14/0)
Windows (5/0)

Blogroll

Pros i contres (Jordi)
Entrepa de fusta (Oriol)
Spaghetti Code (Isaac)
Made in net (Eric)
Nogare (Juan)
Blog de Isaac Jimenez
Web d'en Jaume Benet
Montcada Wireless (Fran)
Blog d'en Ricard Forniol
Angela Fabregues
in.solit.us

Libertad Digital
FOX News
The Wall Street Journal
The Washington Times
The Jerusalem Post

Michelle Malkin
Eurabian News
Nihil Obstat
Barcepundit
Expose the left
Davids Medienkritik
Johan Norberg
Ayaan Hirsi Ali

User Functions

:

:


Lost your password?

Latest posts

Stories

No new stories

Comments last 2 days


Trackbacks last 2 days

No new trackback comments

Links last 2 weeks

No recent new links