Curso de Ruby on Rails para el Master de Deusto

Preview:

Citation preview

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

¿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

¿Quién usa Rails?

twitter.com

github.com

shopify.com

basecamphq.com

yellowpages.comjustin.tv

pragprog.com

miércoles 2 de febrero de 2011

¿Qué vamos a construir?

miércoles 2 de febrero de 2011

¿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

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

Instalación

• Windows: Rails installer

• ssh ror<n>@ror.deusto.efaber.net

miércoles 2 de febrero de 2011

MVC

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

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

¿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

miércoles 2 de febrero de 2011

$ rails serverhttp://localhost:3000

Up and running!

miércoles 2 de febrero de 2011

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

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

La base de datos/db/migrate/<fechahora>_create_users.rb

miércoles 2 de febrero de 2011

$ rake db:migrate

miércoles 2 de febrero de 2011

http://localhost:3000/users

Voila!

miércoles 2 de febrero de 2011

Modelo/app/models/user.rb

miércoles 2 de febrero de 2011

Controladorapp/controllers/users_controller.rb

miércoles 2 de febrero de 2011

Vistas/app/views/users/index.html.erb

miércoles 2 de febrero de 2011

Rutas

miércoles 2 de febrero de 2011

Demo de scaffold de usuarios

miércoles 2 de febrero de 2011

Mucho mejor!

miércoles 2 de febrero de 2011

Introducir algunos records con emails inválidos, duplicados, en blanco...

!!!!!!!!

miércoles 2 de febrero de 2011

ValidacionesActiveRecord nos da “gratis” métodos para validar los campos que introducimos

miércoles 2 de febrero de 2011

Y podemos visualizar los errores de validación en el formulario

miércoles 2 de febrero de 2011

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

Unit Test del modelo User

rake db:test:prepare

/tests/unit/user_test.rb

miércoles 2 de febrero de 2011

Unit Test del modelo User 1/2

miércoles 2 de febrero de 2011

Unit Test del modelo User 2/2

miércoles 2 de febrero de 2011

Ejecutamos el test$ cd test$ ruby unit/test_user.rb

miércoles 2 de febrero de 2011

¡Os toca!

miércoles 2 de febrero de 2011

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

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

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

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

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

Create y update

miércoles 2 de febrero de 2011

Rutas REST¿Cómo es posible que aparentemente la

misma ruta sirva para diferentes acciones?

miércoles 2 de febrero de 2011

Las rutas nos lo explican!

miércoles 2 de febrero de 2011

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

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

Modificamos el tipo del campo de la contraseña y añadimos confirmación

miércoles 2 de febrero de 2011

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

Definimos el atributo password_confirmation y lo añadimos en las validaciones

miércoles 2 de febrero de 2011

miércoles 2 de febrero de 2011

Demo

miércoles 2 de febrero de 2011

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

El usuario va a poder identificarse usando su email y la contraseña que dio al registrarse

miércoles 2 de febrero de 2011

Tenemos que definir el método User.authenticate

miércoles 2 de febrero de 2011

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

Y definimos unas URL cortas más bonitas•/signup: para registrarse•/login: para entrar•/logout: para salir

miércoles 2 de febrero de 2011

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

Plantilla principal/app/views/layouts/application.html.erb

miércoles 2 de febrero de 2011

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

Y ponerlo todo un poco más bonito

/public/stylesheets/application.css

miércoles 2 de febrero de 2011

Demo

miércoles 2 de febrero de 2011

Recommended