Este documento presenta una introducción al framework web Ruby on Rails. Explica brevemente qué es Rails, algunas empresas que lo usan, y los objetivos del curso, que incluyen permitir que los usuarios se registren y accedan a la aplicación. Luego proporciona instrucciones sobre cómo instalar Rails y crear una nueva aplicación de ejemplo.
1. Ruby on Rails
Master Universitario en Desarrollo e Integración de
Soluciones de Software
Universidad de Deusto
Día 1
miércoles 2 de febrero de 2011
2. ¿Qué es Rails?
• Plataforma Open Source para la creación
de sitios web.
• Puntos fuertes:
• Baja barrera de entrada
• Favorece el desarrollo ágil
• Se programa en Ruby
• Comunidad muy activa, despierta y
dispuesta a ayudar
• ...
miércoles 2 de febrero de 2011
3. ¿Quién usa Rails?
shopify.com
twitter.com
basecamphq.com
github.com
justin.tv
yellowpages.com
pragprog.com
miércoles 2 de febrero de 2011
4. ¿Qué vamos a construir?
miércoles 2 de febrero de 2011
5. ¿Qué vamos a construir,
hoy?
• Que nuestros futuros usuarios puedan
registrarse y entrar en la aplicación usando
su login y contraseña
• http://slidesha.re/h4xuXd
miércoles 2 de febrero de 2011
6. Lugares de referencia
• http://railstutorial.org
• Documentación del API de Rails:
http://api.rubyonrails.org ó http://railsapi.com
• Rails Guides:
http://guides.rubyonrails.org/
• “Chuletas”:
http://blog.envylabs.com/Rails_3_Cheat_Sheets.pdf
miércoles 2 de febrero de 2011
7. Instalación
• Windows: Rails installer
• ssh ror<n>@ror.deusto.efaber.net
miércoles 2 de febrero de 2011
8. MVC
Source: http://www.railstutorial.org
miércoles 2 de febrero de 2011
9. Esqueleto de nueva aplicación
[esti@local] $ rails new deusto_app
create README create db
create Rakefile create lib
create Gemfile create log
create app create public
create app/controllers/ create public/images
create app/helpers/ create public/stylesheets
create public/javascripts
create app/mailers/
create script
create app/models/
create test
create app/views/ create vendor/plugins
create config
create config/routes.rb
create config/application.rb
create config/environment.rb
create config/initializers
create config/locales
create config/boot.rb
create config/database.yml
miércoles 2 de febrero de 2011
10. ¿Y ahora qué?
Rails viene con muchas tareas predefinidas
para ponernos en marcha rápidamente
•$ cd deusto_app
•$ rails --help
•$ rails generate --help
•$ rake -T
miércoles 2 de febrero de 2011
23. Mu
cho
me
jor
!
miércoles 2 de febrero de 2011
24. Introducir algunos records con emails inválidos,
duplicados, en blanco...
!!!!!!
!!
miércoles 2 de febrero de 2011
25. Validaciones
ActiveRecord nos da “gratis” métodos para validar los
campos que introducimos
miércoles 2 de febrero de 2011
26. Y podemos visualizar los errores de validación
en el formulario
miércoles 2 de febrero de 2011
27. Tests
• Unit tests: Testean la funcionalidad del
modelo
• Functional tests: Testean la funcionalidad del
controlador y las vistas
• Integration tests: Testean el flujo de una
visita típica a la web
miércoles 2 de febrero de 2011
28. Unit Test del modelo User
/tests/unit/user_test.rb
rake db:test:prepare
miércoles 2 de febrero de 2011
29. Unit Test del modelo User 1/2
miércoles 2 de febrero de 2011
30. Unit Test del modelo User 2/2
miércoles 2 de febrero de 2011
31. Ejecutamos el test
$ cd test
$ ruby unit/test_user.rb
miércoles 2 de febrero de 2011
33. Empezamos de dónde lo habíamos dejado:
$ git clone git://github.com/esti/deusto_app.git
$ git checkout -b 1_user_model 1_user_model
Ó
https://github.com/esti/deusto_app/tree/user_model
miércoles 2 de febrero de 2011
34. Controlador
render /app/views/users/index.html.erb
render /app/views/users/show.html.erb
render /app/views/users/new.html.erb
miércoles 2 de febrero de 2011
35. ActiveRecord
• User.all
• User.all.where(:role => ‘admin’).order
(:created_at => ‘desc’)
• User.find(18)
• User.destroy([1,2,3,4])
http://blog.envylabs.com/Rails_3_Cheat_Sheets.pdf
miércoles 2 de febrero de 2011
36. ActiveRecord
Lazy loading:
users = User.all.where(:role => “admin”)
if params[:order]
users = users.order(params[:order])
end
users.each {|user| user.name} -> Hasta
aquí no se toca la base de datos
miércoles 2 de febrero de 2011
37. Rails console
$ rails console
La consola rails como el interprete “irb” de Ruby pero con acceso a toda la aplicación
rails, con todas las clases, métodos, etc. Es muy útil para hacer pruebas y debugging
miércoles 2 de febrero de 2011
39. Rutas REST
¿Cómo es posible que aparentemente la
misma ruta sirva para diferentes acciones?
miércoles 2 de febrero de 2011
40. Las
rut
as n
os l
o ex
plic
an!
miércoles 2 de febrero de 2011
41. Rutas
/config/routes.rb
$ rake routes
users GET /users(.:format) {:action=>"index", :controller=>"users"}
POST /users(.:format) {:action=>"create", :controller=>"users"}
new_user GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
PUT /users/:id(.:format) {:action=>"update", :controller=>"users"}
DELETE /users/:id(.:format) {:action=>"destroy", :controller=>"users"}
miércoles 2 de febrero de 2011
42. Registro real
No necesitamos una persona que registre a todos los
usuarios, sino que cada uno se pueda dar de alta sólo
miércoles 2 de febrero de 2011
43. Modificamos el tipo del campo de la contraseña
y añadimos confirmación
miércoles 2 de febrero de 2011
44. El campo de confirmación no existe porque no es una
columna de la tabla en la base de datos. Tenemos que
definirlo en el modelo explícitamente.
miércoles 2 de febrero de 2011
45. Definimos el atributo password_confirmation y lo
añadimos en las validaciones
miércoles 2 de febrero de 2011
48. Ahora que el usuario se puede registrar, necesitamos que
pueda hacer login para que luego podamos identificar quién
hace cada tweet.
$ rails generate controller sessions new
miércoles 2 de febrero de 2011
49. El usuario va a poder identificarse usando su email y la
contraseña que dio al registrarse
miércoles 2 de febrero de 2011
50. Tenemos que definir el método User.authenticate
miércoles 2 de febrero de 2011
51. Preparamos el formulario para que el usuario pueda hacer
login con el email y la contraseña
/app/views/sessions/new.html.erb
El HTML que genera
miércoles 2 de febrero de 2011
52. Y definimos unas URL cortas más bonitas
•/signup: para registrarse
•/login: para entrar
•/logout: para salir
miércoles 2 de febrero de 2011
53. Necesitamos links a login/logout en todas las páginas
de la web. Para esto están los “layouts”. Son las
plantillas donde suelen ir la cabecera y el pie de
página comunes a todas las páginas
miércoles 2 de febrero de 2011
54. Plantilla principal
/app/views/layouts/application.html.erb
miércoles 2 de febrero de 2011
55. Necesitamos una función que nos diga si el usuario
está loggeado o no
/app/controllers/application_controller.rb
miércoles 2 de febrero de 2011
56. Y ponerlo todo un poco más bonito
/public/stylesheets/application.css
miércoles 2 de febrero de 2011