Upload
estialvarez
View
2.195
Download
3
Embed Size (px)
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