Conceptos básicos de Ruby on Rails incluyendo:
- Controladores y acciones
- Rutas
- Configuraciones de applicacion
- Generación de modelos y Active Record
- Plantillas y vistas
- REST y recursos
Además de dos ejemplos prácticos:
- Página con mensaje 'Hola Mundo'
- MiniAplicación de blogs
1. Ruby on Rails 3
¿Qué es Ruby on Rails?
¿Por qué elegir Rails?
MVC (Modelo-Vista-Controlador)
Hola Mundo en Rails
Entornos de ejecución en Rails
Resources (Recursos) y REST
Almacenamiento de Registros
Incluyendo comentarios
Referencias
Expositor
Bayron José Guevara
Digital Sense S.A. de C.V.
Fundador y Presidente
www.digitalsensehn.com
2. ¿Qué es Ruby on Rails?
Rails es un framework o entorno de
programación escrito en Ruby para el
desarrollo de aplicaciones Web.
Ruby es un lenguaje de programación
orientado a objetos creado por Yukihiro
Matsumoto como un lenguaje amigable al
programador, es decir, su sintaxis esta
enfocada en incrementar la productividad y
no en la eficiencia de la máquina.
#mostrar contenido de un archivo
File.open(“ejemplo.txt”).each do |linea|
puts linea
end
3. ¿Por qué elegir Rails
sobre otros frameworks?
1. Proporciona un Stack completo de tecnologías
Web (Todo en uno)
2. Solidez y madurez. Twitter, Groupon, Github
3. Pensado en la productividad (Enfatiza
convención sobre configuración)
4. Comunidad grande y licencia libre (MIT)
4. MVC (Modelo-Vista-Controlador)
Rails es fundamentalmente
una implementación de un
patrón de diseño de
software conocido como
MVC.
Este divide un sistema en
tres componentes:
El modelo de datos
La vista o interfaz gráfica
El controlador que contiene
la 'lógica del negocio'.
5. Hola Mundo en Rails
Pasos:
1. Instalar Ruby 1.8.7 o superior.
Pueden descargarlo desde el sitio oficial o
mediante Ruby Version Manager (RVM)
2. Instalar Rails 3.2 o superior
$ gem install rails
3. Crear nuevo proyecto en Rails
$ rails new mi_app
4. Comienza la acción. Abre tu editor de texto
favorito. Si prefieres un IDE recomiendo el plugin
Ruby on Rails para Netbeans y plugin Aptana para
Eclipse (ambos libres) o Ruby Mine (comercial)
6. Hola Mundo en Rails
5. Configurar del entorno.
Instalamos el gem rails-i18n para habilitar
la traducción al español de Rails, siguiendo
estos pasos:
a. Editamos el archivo Gemfile donde
agregamos las dependencias o gems de
nuestro proyecto.
...
gem 'rails-i18n'
...
b. Luego instalamos estos gems ejecutando
el siguiente comando en la consola:
$ bundle install
7. Hola Mundo en Rails
Luego cambiamos la configuración de Rails
adaptándolo a nuestro idioma y zona
horaria.
Hacemos estos incluyendo las siguientes
lineas en el archivo config/application.rb
module MiApp
class Application < Rails::Application
...
# Establecer zona horaria
config.time_zone = 'America/Tegucigalpa'
# Establecer idioma, conf. regional
config.i18n.default_locale = 'es'
...
8. Hola Mundo en Rails
6. Crear un controlador llamado Paginas y una acción
inicio.
# Nuestra clase controladora debe extender a
# ApplicationController
class PaginasController < ApplicationController
# La accion se crea como un metodo de la clase
def inicio
@mensaje = "Hola Mundo"
end
end
7. Crear una plantilla HTML llamada inicio.html.erb dentro
de app/views/paginas
<%= # Embebemos codigo de Ruby haciendo uso de los
tags '<%=' y '%>' de forma similar a PHP %>
<h1><%= @mensaje %></h1>
9. Hola Mundo en Rails
8. Por último mapeamos una URL a nuestro
controlador en el ruteador
MiApp::Application.routes.draw do
# Especificamos nuestro controlador y acción
separados mediante un simbolo de #
match 'inicio' => 'paginas#inicio'
...
end
Ejecutando nuestra aplicación:
Para probar nuestra aplicación primero
debemos iniciar un servidor web, Rails ya
viene incorporado con uno llamado Webrick.
10. Hola Mundo en Rails
Ejecutando nuestra aplicación (continuación):
1. Iniciar el servidor web ejecutando el siguiente
comando dentro del directorio de nuestra app
$ rails server
2. Ingresamos en un navegador web la URL que
corresponde a la ruta que establecimos.
Webrick escucha por defecto en el puerto 3000
http://localhost:3000/inicio
La página web resultante debería mostrar el
mensaje 'Hola Mundo'
11. Entornos de ejecución en Rails
Por defecto los nuevos proyectos de Rails
vienen pre-configurados con tres (3)
entornos de ejecución, los cuales consisten
en configuraciones tales como: base de
datos, caches, logs, gems a utilizar etc.
Desarrollo. Es aquel que utilizamos mientras
la app esta en proceso de creación
Pruebas. Se usa para la ejecución de los
casos de prueba. Útil en Test Driven
Development (TDD)
Producción. Utilizado durante la ejecución en
vivo o antes los usuarios reales.
12. Resources (Recursos) y REST
REST (acrónimo de Transferencia de Estado
Representacional) es un estilo de arquitectura de
software para Web.
Rails hace uso intensivo de esta técnica para
representar recursos/objetos -por ejemplo:
entidades de datos- y realizar operaciones
CRUD (Create/Read/Update/Delete) sobre los
mismos.
En este contexto REST básicamente es un
esquema de URLs y métodos HTTP que
representan operaciones (leer, crear, actualizar,
ver nómina, etc) sobre un recurso, digamos, un
Empleado.
13. Resources (Recursos) y REST
Operación Ruta Método HTTP
Ingresar datos /empleados/new GET
Crear registro /empleados POST
Leer /empleados/1 GET
Modificar datos /empleados/1/edit GET
Actualizar registro /empleados/1 PUT
Eliminar registro /empleados/1 DELETE
Listar todos /empleados GET
Rutas por defecto creadas por Rails para el recurso Empleado
Como pueden observar las operaciones que requieren de
una interfaz gráfica y no modifican el estado de un
recurso (ingresar y actualizar datos, leer, listar) utilizan el
método GET.
Las demás operaciones que si modifican estados, utilizan
el resto de los métodos.
14. Resources (Recursos) y REST
Registrar un Recurso en Rails
Solamente necesitamos abrir el archivo de rutas
(ubicado en config/routes.rb) y agregar la
siguiente linea:
MiApp::Application.routes.draw do
...
resources :empleados
...
end
Esto hace que Rails automáticamente cree rutas y
métodos de ayuda para las siete operaciones
descritas anteriormente. Además es posible
incorporar nuevas fácilmente.
15. Creación de un modelo de datos
Virtualmente todas las aplicaciones web
necesitan acceder a un almacén de datos que
les permita recuperar información persistente y
generar contenido dinámico.
La M de Modelo en MVC hace alusión a esto, al
modelo de datos subyacente. En Rails esto se
gestiona a través de un módulo del núcleo
conocido como Active Record (Registro
Activo).
A diferencia de otros frameworks de BD (como
Hibernate), Active Record casi no requiere de
modificaciones ya que Rails en general opta
por convención sobre configuración.
16. Creación de un modelo de datos
Otro aspecto importante es que Rails permite
realizar operaciones genéricas sobre la base de
datos, es decir, independiente del DBMS que
se utilice.
Pasos para crear un modelo de datos
1. Configurar la base de datos. Rails por defecto
utiliza SQLite. Podemos cambiarla en el archivo
config/database.yml
YML es un lenguaje utilizado por Rails para
almacenar configuraciones de una forma más
simple.
17. Creación de un modelo de datos
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
test: ...
production: ...
2. Crear el modelo y migración de nuestra base
de datos. Tomemos un ejemplo simple de una
aplicación de blogs:
18. Creación de un modelo de datos
Ejecutamos los siguientes comandos:
$ rails generate model Entrada titulo:string
contenido:string
$ rails generate model Comentario texto:string
entrada_id:integer
3. Editar la migración generada por Rails, adaptándola a
nuestras necesidades
class CreateEntradas < ActiveRecord::Migration
def change
create_table :entradas do |t|
t.string :titulo
t.string :contenido
# Crea dos columnas: created_at y updated_at
t.timestamps
end
add_index :entradas, :id
end
19. Creación de un modelo de datos
3. Ejecutar la migración y por ende la creación de las
respectivas tablas
$ rake db:migrate
Podemos confirmar que la base de datos y tablas fueron
creadas inspeccionando el archivo de datos de SQLite.
En lo personal prefiero utilizar SQLite Manager pero
también existen otras alternativas libres
20. Creación de un modelo de datos
4. Abrimos los modelos de Active Record
generados previamente y agregamos relaciones,
validaciones y otras conf. necesarias
class Entrada < ActiveRecord::Base
alias_attribute :fecha_publicacion, :created_at
has_many :comentarios
validates :titulo, :length => 10..80
validates :contenido, :length => { :maximum =>
255 }, :presence => true
end
class Comentario < ActiveRecord::Base
alias_attribute :fecha_publicacion, :created_at
belongs_to :entrada
validates :texto, :length => { :maximum => 255 },
:presence => true
validates :entrada, :presence => true
end
21. Almacenamiento de registros
Ahora procedamos a crear nuevas entradas y comentarios:
1. Registramos las entradas y comentarios como un recurso
de Rails
Miaga::Application.routes.draw do
...
resources :entradas
resources :comentarios
...
end
22. Almacenamiento de registros
2. Creamos el controlador y la acciones para ingresar y ver
una entrada
class EntradasController < ApplicationController
# Formulario de ingreso de nueva entrada
def new
...
end
# Insertar entrada en BD
def create
...
end
# Mostrar entrada
def show
...
end
end
23. Almacenamiento de registros
3. Creamos las respectivas plantillas o vistas.
Es importante señalar que Rails utiliza layouts los cuales
son plantillas que por defecto se aplican a todas las
acciones, aquí ponemos elementos de diseño que se
repiten en todas las páginas.
3.1 Modificamos el layout por defecto para incluir el título
de nuestras páginas y una caja de mensajes.
<html>
<head>...</head>
<body>
<h1><%= @titulo_pagina %></h1>
<% #incluimos otra plantilla para mostrar mensajes %>
<%= render 'shared/mensajes' %>
<%= yield %>
</body>
</html>
24. Almacenamiento de registros
3.2 Creamos la vista del formulario de ingreso en
app/views/entradas/new.html.erb
<%= render 'shared/validaciones', :entidad => @entrada
%>
<%= form_for @entrada do |f| %>
<%= f.label :titulo, 'Título:' %><br />
<%= f.text_field :titulo %><br /><br />
<%= f.label :contenido, 'Contenido:' %><br />
<%= f.text_area :contenido, :size => '80x6'
%><br />
<%= f.submit 'Guardar' %>
<% end %>
25. Almacenamiento de registros
3.3. Ahora creamos la plantilla que mostrará la información
de cada entrada en app/views/entradas/show.html.erb
<%= render 'shared/validaciones', :entidad =>
@nuevo_comentario %>
<h3 class='titulo'>Título: <%= @entrada.titulo %></h3>
<strong>Contenido</strong><br />
<p><%= @entrada.contenido %></p>
<%= link_to 'Ir a lista de entradas', entradas_path %>
26. Incluyendo comentarios
Ahora vamos a mostrar los comentarios de cada entrada y
un formulario de ingreso. Para ello seguimos los
siguientes pasos:
1. Creamos el controlador de los comentarios, pero ahora
solamente definimos la acción create.
class ComentariosController < ApplicationController
# Insertar comentario en BD
def create
...
end
end
27. Incluyendo comentarios
2. Modificamos la plantilla de entradas, ya que desde cada
entrada se podrán ver y asociar nuevos comentarios.
<div id="comentarios">
<h2>Comentarios</h2>
<%= form_for @nuevo_comentario do |f| %>
<%= f.label :texto, 'Nuevo Comentario' %><br />
<%= f.text_area :texto, :size => '60x4' %><br />
<%= f.hidden_field :entrada_id, :value => @entrada.id%>
<%= f.submit 'Enviar' %>
<% end %>
<h3>Mostrando <%= pluralize @comentarios.count,
'comentario' %></h3>
<% @comentarios.each do |comentario| %>
<em>Publicado a las <%=
comentario.fecha_publicacion.strftime("%I:%M %p")
%></em>
<%= comentario.texto %>
<% end %>
</div>
28. Incluyendo comentarios
Algunas observaciones con respecto a la plantilla
anterior:
Hemos incluido un hidden field que envía el ID de
la entrada relacionada.
Utilizamos el método pluralize que permite mostrar
una frase en plural o singular según el valor
suministrado
Hemos utilizado el alias fecha_publicacion en lugar
del campo created_at de la base de datos
La fechas en Rails poseen un método llamado
strftime que permite especificar el formato en que
se mostrará la fecha.
29. Referencias
Sitio oficial de Ruby en español:
http://www.ruby-lang.org/es/
Sitio web oficial de Rails:
http://rubyonrails.org
Rails Casts: http://railscasts.com
Libros recomendados
Ruby on Rails Tutorial (Gratis):
http://ruby.railstutorial.org
The Rails 3 Way por Obie Fernández
30. Gracias por su atención
Esta presentación se encuentra disponible en:
www.slideshare.net/Socrattes
Pueden descargar el código fuente en:
github.com/Socrattes2099/RubyOnRails-FLISOL