Post on 12-May-2015
Ruby on RailsMaster Universitario en Desarrollo e Integración de
Soluciones Software
Universidad de Deusto
Día 2
miércoles 2 de febrero de 2011
• Registro de usuarios
• Login y logout de usuarios
• Tests unitarios del modelo usuarios
¿Qué hicimos ayer?
miércoles 2 de febrero de 2011
Algunas aclaraciones
miércoles 2 de febrero de 2011
Vistas y Helpers
miércoles 2 de febrero de 2011
/logs/development.log
/app/controllers/sessions_controller.rb
miércoles 2 de febrero de 2011
Rutas y helpers
/app/layouts/application.html.erb
/app/views/sessions/new.html.erb
miércoles 2 de febrero de 2011
Las rutas definen los siguientes helpers que podemos usar en los links y en los formularios y nos ahorran escribir direcciones largas.
Sólo hay que poner el sufijo “_path” a la primera columna
Ejemplos: •link_to users_path•link_to new_user_path•form_for sessions_path (porque es POST)•new_session_path
miércoles 2 de febrero de 2011
¿Preguntas sobre lo de ayer?
miércoles 2 de febrero de 2011
Dónde lo dejamos ayer:https://github.com/esti/deusto_app/zipball/
2_signup_and_login
Dónde vamos a llegar ahora:https://github.com/esti/deusto_app/zipball/3_tweets
miércoles 2 de febrero de 2011
Test funcionales/test/functional/users_controller_test.rb
miércoles 2 de febrero de 2011
... para login/logout también/test/functionals/sessions_controller_test.rb
miércoles 2 de febrero de 2011
FixturesPara comprobar que un usuario ya registrado puede
loguearse, necesitamos poblar la base de datos de test con usuarios de prueba/db/fixtures/users.rb
miércoles 2 de febrero de 2011
Ejecutamos todos los tests, tanto Unit como Functional
$ rake test
miércoles 2 de febrero de 2011
• users_controller_test.rb: Comprobar que un usuario que pone un email no válido al registrarse, vuelve al formulario y le sale el error de validación.
• sessions_controller_test.rb: Comprobar que un usuario inexistente en la base de datos no puede entrar.
Ejercicios
miércoles 2 de febrero de 2011
Siguiente
Ahora que ya estamos loggeados, necesitamos poder publicar tweets
miércoles 2 de febrero de 2011
Demo
miércoles 2 de febrero de 2011
Modelo Tweet$ rails generate scaffold Tweet content:string user:references
$ rake db:migrate
miércoles 2 de febrero de 2011
Modelo TweetActive Record nos “regala” métodos para definir relaciones
entre modelos
miércoles 2 de febrero de 2011
Rails console$ rails console
miércoles 2 de febrero de 2011
Lo que sale del scaffold
Lo que queremos conseguir
miércoles 2 de febrero de 2011
Poblamos la base de datos con datos de prueba con un “rake task”
/lib/tasks/tweets.rake
miércoles 2 de febrero de 2011
Lo que sale del scaffold
Modificado
/app/views/tweets/index.html.erb
miércoles 2 de febrero de 2011
Helper
miércoles 2 de febrero de 2011
¡A programar!
miércoles 2 de febrero de 2011
Ahora queremos ahorrarle un click al usuario incluyendo el el formulario directamente en el listado de tweets
miércoles 2 de febrero de 2011
Scaffold nos ha creado automáticamente el formulario de crear un tweet /app/views/tweets/_form.html.erb
miércoles 2 de febrero de 2011
miércoles 2 de febrero de 2011
Nos aseguramos de que para poder tweetear, te has identificado antes
Y al guardar el tweet, nos aseguramos de asignárselo al usuario
correspondiente
miércoles 2 de febrero de 2011
Esta es la función que comprueba que el usuario está loggeado antes
de poder tweetear
miércoles 2 de febrero de 2011
Ahora que tenemos la funcionalidad principal de nuestra applicación, hacemos la “home” de nuestra web sea el
listado de tweets
miércoles 2 de febrero de 2011
Demo
miércoles 2 de febrero de 2011
/app/views/tweets/_form.html.erb
/app/views/users/_form.html.erb
Es hora de hacer un poco de limpieza: el código que muestra los errores de validación, es prácticamente el mismo para el formulario de tweets y para el de usuarios.
miércoles 2 de febrero de 2011
Hacemos un “partial” (/app/views/shared/_error_messages.html.erb) que contiene ese
código duplicado
Y lo incluimos en los dos formularios
miércoles 2 de febrero de 2011
Tests!
miércoles 2 de febrero de 2011
/test/units/tweet_test.rb
miércoles 2 de febrero de 2011
/test/controllers/tweets_controller_test.rb
miércoles 2 de febrero de 2011
/test/controllers/tweets_controller_test.rb
miércoles 2 de febrero de 2011
La función de hacer login en un test la vamos a necesitar en muchos sitios, por eso la ponemos en el helper /test/
test_helper.rb
miércoles 2 de febrero de 2011
Nuestro primer test de integración
miércoles 2 de febrero de 2011
¡Os toca!
miércoles 2 de febrero de 2011
Ajax
miércoles 2 de febrero de 2011
Demo
miércoles 2 de febrero de 2011
Prototype: Librería Javascript
Así incluimos la librería javascript
Este es el HTML que
genera
miércoles 2 de febrero de 2011
Le decimos al formulario que queremos que funcione
de manera “remota”
Genera una etiqueta personalizada HTML5 que incluye en el formulario
Y el javascript que trae Rails incluye una función que
todos los formularios que tienen esta etiqueta se
manden de manera remota
miércoles 2 de febrero de 2011
Ahora tenemos que hacer que la respuesta del servidor sea la petición es “remota”. Para eso vale el bloque
“respond_to”!
render “app/views/tweets/create.js.erb”
miércoles 2 de febrero de 2011
/app/views/tweets/create.js.erb Contiene la respuesta del servidor para el formulario
remoto, en javascript.
miércoles 2 de febrero de 2011
Hacemos un partial que contiene la
porción de HTML que corresponde a cada tweet, que es lo que incluimos al principio de la lista
cuando alquien crea un nuevo
tweet
Y ya que lo tenemos lo
reutilizamos en el listado de tweets/app/views/tweets/index.html.erb
/app/views/tweets/_tweet.html.erb
miércoles 2 de febrero de 2011
miércoles 2 de febrero de 2011