curso de ruby on rails para el master de deusto
TRANSCRIPT
![Page 1: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/1.jpg)
Ruby on RailsMaster Universitario en Desarrollo e Integración de
Soluciones de Software
Universidad de Deusto
Día 1
miércoles 2 de febrero de 2011
![Page 2: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/2.jpg)
¿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
![Page 3: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/3.jpg)
¿Quién usa Rails?
twitter.com
github.com
shopify.com
basecamphq.com
yellowpages.comjustin.tv
pragprog.com
miércoles 2 de febrero de 2011
![Page 4: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/4.jpg)
¿Qué vamos a construir?
miércoles 2 de febrero de 2011
![Page 5: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/5.jpg)
¿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
![Page 6: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/6.jpg)
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
![Page 7: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/7.jpg)
Instalación
• Windows: Rails installer
• ssh ror<n>@ror.deusto.efaber.net
miércoles 2 de febrero de 2011
![Page 8: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/8.jpg)
MVC
Source: http://www.railstutorial.orgmiércoles 2 de febrero de 2011
![Page 9: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/9.jpg)
Esqueleto de nueva aplicación[esti@local] $ rails new deusto_app create README create Rakefile create Gemfile create app create app/controllers/ create app/helpers/ create app/mailers/ create app/models/ create app/views/ 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
create db create lib create log create public create public/images create public/stylesheets create public/javascripts create script create test create vendor/plugins
miércoles 2 de febrero de 2011
![Page 10: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/10.jpg)
¿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
![Page 11: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/11.jpg)
miércoles 2 de febrero de 2011
![Page 12: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/12.jpg)
$ rails serverhttp://localhost:3000
Up and running!
miércoles 2 de febrero de 2011
![Page 13: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/13.jpg)
Creación de usuarios$ rails generate scaffold User name:string email:string password:string
create db/migrate/20110128102008_create_users.rb create app/models/user.rb create test/unit/user_test.rb create test/fixtures/users.yml route resources :users create app/controllers/users_controller.rb create app/views/users create app/views/users/index.html.erb create app/views/users/edit.html.erb create app/views/users/show.html.erb create app/views/users/new.html.erb create app/views/users/_form.html.erb create test/functional/users_controller_test.rb create app/helpers/users_helper.rb create test/unit/helpers/users_helper_test.rb create public/stylesheets/scaffold.css
miércoles 2 de febrero de 2011
![Page 14: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/14.jpg)
Creación de usuarios$ rails generate scaffold User name:string email:string password:string
create db/migrate/20110128102008_create_users.rb create app/models/user.rb create test/unit/user_test.rb create test/fixtures/users.yml route resources :users create app/controllers/users_controller.rb create app/views/users create app/views/users/index.html.erb create app/views/users/edit.html.erb create app/views/users/show.html.erb create app/views/users/new.html.erb create app/views/users/_form.html.erb create test/functional/users_controller_test.rb create app/helpers/users_helper.rb create test/unit/helpers/users_helper_test.rb create public/stylesheets/scaffold.css
!!!
miércoles 2 de febrero de 2011
![Page 15: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/15.jpg)
La base de datos/db/migrate/<fechahora>_create_users.rb
miércoles 2 de febrero de 2011
![Page 16: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/16.jpg)
$ rake db:migrate
miércoles 2 de febrero de 2011
![Page 17: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/17.jpg)
http://localhost:3000/users
Voila!
miércoles 2 de febrero de 2011
![Page 18: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/18.jpg)
Modelo/app/models/user.rb
miércoles 2 de febrero de 2011
![Page 19: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/19.jpg)
Controladorapp/controllers/users_controller.rb
miércoles 2 de febrero de 2011
![Page 20: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/20.jpg)
Vistas/app/views/users/index.html.erb
miércoles 2 de febrero de 2011
![Page 21: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/21.jpg)
Rutas
miércoles 2 de febrero de 2011
![Page 22: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/22.jpg)
Demo de scaffold de usuarios
miércoles 2 de febrero de 2011
![Page 23: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/23.jpg)
Mucho mejor!
miércoles 2 de febrero de 2011
![Page 24: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/24.jpg)
Introducir algunos records con emails inválidos, duplicados, en blanco...
!!!!!!!!
miércoles 2 de febrero de 2011
![Page 25: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/25.jpg)
ValidacionesActiveRecord nos da “gratis” métodos para validar los campos que introducimos
miércoles 2 de febrero de 2011
![Page 26: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/26.jpg)
Y podemos visualizar los errores de validación en el formulario
miércoles 2 de febrero de 2011
![Page 27: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/27.jpg)
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
![Page 28: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/28.jpg)
Unit Test del modelo User
rake db:test:prepare
/tests/unit/user_test.rb
miércoles 2 de febrero de 2011
![Page 29: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/29.jpg)
Unit Test del modelo User 1/2
miércoles 2 de febrero de 2011
![Page 30: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/30.jpg)
Unit Test del modelo User 2/2
miércoles 2 de febrero de 2011
![Page 31: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/31.jpg)
Ejecutamos el test$ cd test$ ruby unit/test_user.rb
miércoles 2 de febrero de 2011
![Page 32: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/32.jpg)
¡Os toca!
miércoles 2 de febrero de 2011
![Page 33: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/33.jpg)
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
![Page 34: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/34.jpg)
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
![Page 35: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/35.jpg)
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
![Page 36: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/36.jpg)
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
![Page 37: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/37.jpg)
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
![Page 38: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/38.jpg)
Create y update
miércoles 2 de febrero de 2011
![Page 39: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/39.jpg)
Rutas REST¿Cómo es posible que aparentemente la
misma ruta sirva para diferentes acciones?
miércoles 2 de febrero de 2011
![Page 40: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/40.jpg)
Las rutas nos lo explican!
miércoles 2 de febrero de 2011
![Page 41: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/41.jpg)
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
![Page 42: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/42.jpg)
Registro realNo 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
![Page 43: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/43.jpg)
Modificamos el tipo del campo de la contraseña y añadimos confirmación
miércoles 2 de febrero de 2011
![Page 44: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/44.jpg)
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
![Page 45: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/45.jpg)
Definimos el atributo password_confirmation y lo añadimos en las validaciones
miércoles 2 de febrero de 2011
![Page 46: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/46.jpg)
miércoles 2 de febrero de 2011
![Page 47: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/47.jpg)
Demo
miércoles 2 de febrero de 2011
![Page 48: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/48.jpg)
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
![Page 49: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/49.jpg)
El usuario va a poder identificarse usando su email y la contraseña que dio al registrarse
miércoles 2 de febrero de 2011
![Page 50: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/50.jpg)
Tenemos que definir el método User.authenticate
miércoles 2 de febrero de 2011
![Page 51: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/51.jpg)
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
![Page 52: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/52.jpg)
Y definimos unas URL cortas más bonitas•/signup: para registrarse•/login: para entrar•/logout: para salir
miércoles 2 de febrero de 2011
![Page 53: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/53.jpg)
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
![Page 54: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/54.jpg)
Plantilla principal/app/views/layouts/application.html.erb
miércoles 2 de febrero de 2011
![Page 55: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/55.jpg)
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
![Page 56: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/56.jpg)
Y ponerlo todo un poco más bonito
/public/stylesheets/application.css
miércoles 2 de febrero de 2011
![Page 57: Curso de Ruby on Rails para el Master de Deusto](https://reader038.vdocuments.mx/reader038/viewer/2022102805/5550fb2bb4c90572478b4a53/html5/thumbnails/57.jpg)
Demo
miércoles 2 de febrero de 2011