Curso de Ruby on Rails para el Master de Deusto. Día 2

2,136 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,136
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
52
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Curso de Ruby on Rails para el Master de Deusto. Día 2

  1. 1. Ruby on Rails Master Universitario en Desarrollo e Integración de Soluciones Software Universidad de Deusto Día 2miércoles 2 de febrero de 2011
  2. 2. ¿Qué hicimos ayer? • Registro de usuarios • Login y logout de usuarios • Tests unitarios del modelo usuariosmiércoles 2 de febrero de 2011
  3. 3. Algunas aclaracionesmiércoles 2 de febrero de 2011
  4. 4. Vistas y Helpersmiércoles 2 de febrero de 2011
  5. 5. /app/controllers/ sessions_controller.rb /logs/development.logmiércoles 2 de febrero de 2011
  6. 6. Rutas y helpers /app/layouts/ application.html.erb /app/views/sessions/ new.html.erbmiércoles 2 de febrero de 2011
  7. 7. 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_pathmiércoles 2 de febrero de 2011
  8. 8. ¿Preguntas sobre lo de ayer?miércoles 2 de febrero de 2011
  9. 9. 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_tweetsmiércoles 2 de febrero de 2011
  10. 10. Test funcionales /test/functional/users_controller_test.rbmiércoles 2 de febrero de 2011
  11. 11. ... para login/logout también /test/functionals/sessions_controller_test.rbmiércoles 2 de febrero de 2011
  12. 12. Fixtures Para comprobar que un usuario ya registrado puede loguearse, necesitamos poblar la base de datos de test con usuarios de prueba /db/fixtures/users.rbmiércoles 2 de febrero de 2011
  13. 13. Ejecutamos todos los tests, tanto Unit como Functional $ rake testmiércoles 2 de febrero de 2011
  14. 14. Ejercicios • 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.miércoles 2 de febrero de 2011
  15. 15. Siguiente Ahora que ya estamos loggeados, necesitamos poder publicar tweetsmiércoles 2 de febrero de 2011
  16. 16. Demomiércoles 2 de febrero de 2011
  17. 17. Modelo Tweet$ rails generate scaffold Tweet content:string user:references $ rake db:migratemiércoles 2 de febrero de 2011
  18. 18. Modelo TweetActive Record nos “regala” métodos para definir relaciones entre modelosmiércoles 2 de febrero de 2011
  19. 19. Rails console $ rails consolemiércoles 2 de febrero de 2011
  20. 20. Lo que sale del scaffold Lo que queremos conseguirmiércoles 2 de febrero de 2011
  21. 21. Poblamos la base de datos con datos de prueba con un “rake task” /lib/tasks/tweets.rakemiércoles 2 de febrero de 2011
  22. 22. /app/views/tweets/index.html.erb Lo que sale del scaffold Modificadomiércoles 2 de febrero de 2011
  23. 23. Helpermiércoles 2 de febrero de 2011
  24. 24. ¡A programar!miércoles 2 de febrero de 2011
  25. 25. Ahora queremos ahorrarle un click al usuario incluyendo el el formulario directamente en el listado de tweetsmiércoles 2 de febrero de 2011
  26. 26. Scaffold nos ha creado automáticamente el formulario de crear un tweet /app/views/tweets/_form.html.erbmiércoles 2 de febrero de 2011
  27. 27. miércoles 2 de febrero de 2011
  28. 28. Nos aseguramos de que para poder tweetear, te has identificado antes Y al guardar el tweet, nos aseguramos de asignárselo al usuario correspondientemiércoles 2 de febrero de 2011
  29. 29. Esta es la función que comprueba que el usuario está loggeado antes de poder tweetearmiércoles 2 de febrero de 2011
  30. 30. Ahora que tenemos la funcionalidad principal de nuestra applicación, hacemos la “home” de nuestra web sea el listado de tweetsmiércoles 2 de febrero de 2011
  31. 31. Demomiércoles 2 de febrero de 2011
  32. 32. 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. /app/views/tweets/_form.html.erb /app/views/users/_form.html.erbmiércoles 2 de febrero de 2011
  33. 33. Hacemos un “partial” (/app/views/shared/ _error_messages.html.erb) que contiene ese código duplicado Y lo incluimos en los dos formulariosmiércoles 2 de febrero de 2011
  34. 34. Tests!miércoles 2 de febrero de 2011
  35. 35. /test/units/tweet_test.rbmiércoles 2 de febrero de 2011
  36. 36. /test/controllers/tweets_controller_test.rbmiércoles 2 de febrero de 2011
  37. 37. /test/controllers/tweets_controller_test.rbmiércoles 2 de febrero de 2011
  38. 38. 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.rbmiércoles 2 de febrero de 2011
  39. 39. Nuestro primer test de integraciónmiércoles 2 de febrero de 2011
  40. 40. ¡Os toca!miércoles 2 de febrero de 2011
  41. 41. Ajaxmiércoles 2 de febrero de 2011
  42. 42. Demomiércoles 2 de febrero de 2011
  43. 43. Prototype: Librería Javascript Así incluimos la librería javascript Este es el HTML que generamiércoles 2 de febrero de 2011
  44. 44. 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 remotamiércoles 2 de febrero de 2011
  45. 45. 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
  46. 46. /app/views/tweets/create.js.erb Contiene la respuesta del servidor para el formulario remoto, en javascript.miércoles 2 de febrero de 2011
  47. 47. 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 /app/views/tweets/_tweet.html.erb tweet Y ya que lo tenemos lo reutilizamos en el /app/views/tweets/index.html.erb listado de tweetsmiércoles 2 de febrero de 2011
  48. 48. miércoles 2 de febrero de 2011

×