57
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

Curso de Ruby on Rails para el Master de Deusto

Embed Size (px)

Citation preview

Page 1: Curso de Ruby on Rails para el Master de Deusto

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

¿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

¿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

¿Qué vamos a construir?

miércoles 2 de febrero de 2011

Page 5: Curso de Ruby on Rails para el Master de Deusto

¿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

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

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

MVC

Source: http://www.railstutorial.orgmiércoles 2 de febrero de 2011

Page 9: Curso de Ruby on Rails para el Master de Deusto

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

¿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

miércoles 2 de febrero de 2011

Page 12: Curso de Ruby on Rails para el Master de Deusto

$ 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

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

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

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

$ rake db:migrate

miércoles 2 de febrero de 2011

Page 17: Curso de Ruby on Rails para el Master de Deusto

http://localhost:3000/users

Voila!

miércoles 2 de febrero de 2011

Page 18: Curso de Ruby on Rails para el Master de Deusto

Modelo/app/models/user.rb

miércoles 2 de febrero de 2011

Page 19: Curso de Ruby on Rails para el Master de Deusto

Controladorapp/controllers/users_controller.rb

miércoles 2 de febrero de 2011

Page 20: Curso de Ruby on Rails para el Master de Deusto

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

Rutas

miércoles 2 de febrero de 2011

Page 22: Curso de Ruby on Rails para el Master de Deusto

Demo de scaffold de usuarios

miércoles 2 de febrero de 2011

Page 23: Curso de Ruby on Rails para el Master de Deusto

Mucho mejor!

miércoles 2 de febrero de 2011

Page 24: Curso de Ruby on Rails para el Master de Deusto

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

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

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

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

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

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

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

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

¡Os toca!

miércoles 2 de febrero de 2011

Page 33: Curso de Ruby on Rails para el Master de Deusto

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

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

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

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

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

Create y update

miércoles 2 de febrero de 2011

Page 39: Curso de Ruby on Rails para el Master de Deusto

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

Las rutas nos lo explican!

miércoles 2 de febrero de 2011

Page 41: Curso de Ruby on Rails para el Master de Deusto

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

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

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

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

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

miércoles 2 de febrero de 2011

Page 47: Curso de Ruby on Rails para el Master de Deusto

Demo

miércoles 2 de febrero de 2011

Page 48: Curso de Ruby on Rails para el Master de Deusto

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

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

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

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

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

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

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

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

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

Demo

miércoles 2 de febrero de 2011