SlideShare a Scribd company logo
1 of 48
Download to read offline
Ruby on Rails
                      Master Universitario en Desarrollo e Integración de
                                     Soluciones Software

                                    Universidad de Deusto

                                            Día 2


miércoles 2 de febrero de 2011
¿Qué hicimos ayer?

                     • Registro de usuarios
                     • Login y logout de usuarios
                     • Tests unitarios del modelo usuarios


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
/app/controllers/
                                 sessions_controller.rb




                                  /logs/development.log




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
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.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
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
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 Tweet
Active 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
/app/views/tweets/index.html.erb
                                                           Lo que sale del scaffold




        Modificado




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
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.erb
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
                                 /app/views/tweets/_tweet.html.erb          tweet




                                                                         Y ya que lo
                                                                         tenemos lo
                                                                     reutilizamos en el
                                 /app/views/tweets/index.html.erb    listado de tweets




miércoles 2 de febrero de 2011
miércoles 2 de febrero de 2011

More Related Content

Viewers also liked

Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao rubyFrancis Wagner
 
Curso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosCurso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosAlberto Perdomo
 
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsAlberto Perdomo
 
Desarrollo Ágil y Ruby on Rails
Desarrollo Ágil y Ruby on RailsDesarrollo Ágil y Ruby on Rails
Desarrollo Ágil y Ruby on RailsErnesto Jiménez
 
Conviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-endConviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-endvideo2brain_mx
 
Desarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y RailsDesarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y RailsFran Diéguez
 
Sass: CSS con Superpoderes
Sass: CSS con SuperpoderesSass: CSS con Superpoderes
Sass: CSS con SuperpoderesEdgar Parada
 
CSS Preprocessors - Sass
CSS Preprocessors - SassCSS Preprocessors - Sass
CSS Preprocessors - SassLourdes Montano
 
Pre-procesadores CSS. SASS
Pre-procesadores CSS. SASSPre-procesadores CSS. SASS
Pre-procesadores CSS. SASSMarionaCruz
 
Uso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaUso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaJose Gomez Castaño
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven DevelopmentAlberto Perdomo
 
Curso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasCurso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasAlberto Perdomo
 
Haml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticosHaml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticosDAVID GRILLI
 

Viewers also liked (20)

Ruby On Rails (Parte 1. Introducción)
Ruby On Rails (Parte 1. Introducción)Ruby On Rails (Parte 1. Introducción)
Ruby On Rails (Parte 1. Introducción)
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Curso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosCurso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitarios
 
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubs
 
Desarrollo Ágil y Ruby on Rails
Desarrollo Ágil y Ruby on RailsDesarrollo Ágil y Ruby on Rails
Desarrollo Ágil y Ruby on Rails
 
Conviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-endConviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-end
 
Desarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y RailsDesarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y Rails
 
Sass: CSS con Superpoderes
Sass: CSS con SuperpoderesSass: CSS con Superpoderes
Sass: CSS con Superpoderes
 
CSS Preprocessors - Sass
CSS Preprocessors - SassCSS Preprocessors - Sass
CSS Preprocessors - Sass
 
Pre-procesadores CSS. SASS
Pre-procesadores CSS. SASSPre-procesadores CSS. SASS
Pre-procesadores CSS. SASS
 
Uso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaUso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en Astronomía
 
Ruby intro
Ruby introRuby intro
Ruby intro
 
Sass y compass
Sass y compassSass y compass
Sass y compass
 
Lenguaje de programación Ruby
Lenguaje de programación RubyLenguaje de programación Ruby
Lenguaje de programación Ruby
 
Ruby 101 session 2
Ruby 101 session 2Ruby 101 session 2
Ruby 101 session 2
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
 
Curso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasCurso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticas
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
Haml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticosHaml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticos
 

Recently uploaded

11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx
11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx
11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptxFESARAUGUSTOFANDIORI
 
PLAN DE GESTION DEL RIESGO 2023 - 2024.docx
PLAN DE GESTION DEL RIESGO  2023 - 2024.docxPLAN DE GESTION DEL RIESGO  2023 - 2024.docx
PLAN DE GESTION DEL RIESGO 2023 - 2024.docxpily R.T.
 
TERCER GRADO PROGRAMACION ANUAL CCSS 3° - 2024.docx
TERCER GRADO PROGRAMACION ANUAL CCSS 3° - 2024.docxTERCER GRADO PROGRAMACION ANUAL CCSS 3° - 2024.docx
TERCER GRADO PROGRAMACION ANUAL CCSS 3° - 2024.docxlitaroxselyperezmont
 
4ª SESION la misión santificadora del Espíritu Santo en la vida de la Iglesi...
4ª SESION  la misión santificadora del Espíritu Santo en la vida de la Iglesi...4ª SESION  la misión santificadora del Espíritu Santo en la vida de la Iglesi...
4ª SESION la misión santificadora del Espíritu Santo en la vida de la Iglesi...Reneeavia
 
TEMA EGIPTO.pdf. Presentación civilización
TEMA EGIPTO.pdf. Presentación civilizaciónTEMA EGIPTO.pdf. Presentación civilización
TEMA EGIPTO.pdf. Presentación civilizaciónVasallo1
 
Como construir los vínculos afectivos (Grupal)
Como construir los vínculos afectivos (Grupal)Como construir los vínculos afectivos (Grupal)
Como construir los vínculos afectivos (Grupal)portafoliodigitalyos
 
2. Entornos Virtuales de Aprendizaje.pptx
2. Entornos Virtuales de Aprendizaje.pptx2. Entornos Virtuales de Aprendizaje.pptx
2. Entornos Virtuales de Aprendizaje.pptxJunkotantik
 
cuadernillo_cuentos_de_los_valores_elprofe20 (1).docx
cuadernillo_cuentos_de_los_valores_elprofe20 (1).docxcuadernillo_cuentos_de_los_valores_elprofe20 (1).docx
cuadernillo_cuentos_de_los_valores_elprofe20 (1).docxANDREAGRACEDURANSALA
 
Evaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la OrganizaciónEvaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la OrganizaciónJonathanCovena1
 
proyecto semana de los Jardines, actividades a realizar para resaltar esta fecha
proyecto semana de los Jardines, actividades a realizar para resaltar esta fechaproyecto semana de los Jardines, actividades a realizar para resaltar esta fecha
proyecto semana de los Jardines, actividades a realizar para resaltar esta fechanitoagurto67
 
A propósito de la globalización y la financiarización del mundo
A propósito de la globalización y la financiarización del mundoA propósito de la globalización y la financiarización del mundo
A propósito de la globalización y la financiarización del mundosubfabian
 
Análisis de los factores internos en una Organización
Análisis de los factores internos en una OrganizaciónAnálisis de los factores internos en una Organización
Análisis de los factores internos en una OrganizaciónJonathanCovena1
 
Tema Identificar Relaciones y Casos de Uso 19-05-24.pdf
Tema Identificar Relaciones y Casos de Uso 19-05-24.pdfTema Identificar Relaciones y Casos de Uso 19-05-24.pdf
Tema Identificar Relaciones y Casos de Uso 19-05-24.pdfNoe Castillo
 
Época colonial: vestimenta, costumbres y juegos de la época
Época colonial: vestimenta, costumbres y juegos de la épocaÉpoca colonial: vestimenta, costumbres y juegos de la época
Época colonial: vestimenta, costumbres y juegos de la épocacecifranco1981
 
a propósito de la globalización y sus efectos
a propósito de la globalización y sus efectosa propósito de la globalización y sus efectos
a propósito de la globalización y sus efectossubfabian
 
2.15. Calendario Civico Escolar 2024.docx
2.15. Calendario Civico Escolar 2024.docx2.15. Calendario Civico Escolar 2024.docx
2.15. Calendario Civico Escolar 2024.docxCarlosEnriqueArgoteC
 
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)JonathanCovena1
 
Resumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos Escolares
Resumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos EscolaresResumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos Escolares
Resumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos EscolaresLluviaAliciaHernande
 

Recently uploaded (20)

11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx
11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx
11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx
 
PLAN DE GESTION DEL RIESGO 2023 - 2024.docx
PLAN DE GESTION DEL RIESGO  2023 - 2024.docxPLAN DE GESTION DEL RIESGO  2023 - 2024.docx
PLAN DE GESTION DEL RIESGO 2023 - 2024.docx
 
TERCER GRADO PROGRAMACION ANUAL CCSS 3° - 2024.docx
TERCER GRADO PROGRAMACION ANUAL CCSS 3° - 2024.docxTERCER GRADO PROGRAMACION ANUAL CCSS 3° - 2024.docx
TERCER GRADO PROGRAMACION ANUAL CCSS 3° - 2024.docx
 
4ª SESION la misión santificadora del Espíritu Santo en la vida de la Iglesi...
4ª SESION  la misión santificadora del Espíritu Santo en la vida de la Iglesi...4ª SESION  la misión santificadora del Espíritu Santo en la vida de la Iglesi...
4ª SESION la misión santificadora del Espíritu Santo en la vida de la Iglesi...
 
TEMA EGIPTO.pdf. Presentación civilización
TEMA EGIPTO.pdf. Presentación civilizaciónTEMA EGIPTO.pdf. Presentación civilización
TEMA EGIPTO.pdf. Presentación civilización
 
Como construir los vínculos afectivos (Grupal)
Como construir los vínculos afectivos (Grupal)Como construir los vínculos afectivos (Grupal)
Como construir los vínculos afectivos (Grupal)
 
TRABAJO CON TRES O MAS FRACCIONES PARA NIÑOS
TRABAJO CON TRES O MAS FRACCIONES PARA NIÑOSTRABAJO CON TRES O MAS FRACCIONES PARA NIÑOS
TRABAJO CON TRES O MAS FRACCIONES PARA NIÑOS
 
2. Entornos Virtuales de Aprendizaje.pptx
2. Entornos Virtuales de Aprendizaje.pptx2. Entornos Virtuales de Aprendizaje.pptx
2. Entornos Virtuales de Aprendizaje.pptx
 
cuadernillo_cuentos_de_los_valores_elprofe20 (1).docx
cuadernillo_cuentos_de_los_valores_elprofe20 (1).docxcuadernillo_cuentos_de_los_valores_elprofe20 (1).docx
cuadernillo_cuentos_de_los_valores_elprofe20 (1).docx
 
Evaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la OrganizaciónEvaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la Organización
 
proyecto semana de los Jardines, actividades a realizar para resaltar esta fecha
proyecto semana de los Jardines, actividades a realizar para resaltar esta fechaproyecto semana de los Jardines, actividades a realizar para resaltar esta fecha
proyecto semana de los Jardines, actividades a realizar para resaltar esta fecha
 
A propósito de la globalización y la financiarización del mundo
A propósito de la globalización y la financiarización del mundoA propósito de la globalización y la financiarización del mundo
A propósito de la globalización y la financiarización del mundo
 
Revista Faro Normalista 6, 18 de mayo 2024
Revista Faro Normalista 6, 18 de mayo 2024Revista Faro Normalista 6, 18 de mayo 2024
Revista Faro Normalista 6, 18 de mayo 2024
 
Análisis de los factores internos en una Organización
Análisis de los factores internos en una OrganizaciónAnálisis de los factores internos en una Organización
Análisis de los factores internos en una Organización
 
Tema Identificar Relaciones y Casos de Uso 19-05-24.pdf
Tema Identificar Relaciones y Casos de Uso 19-05-24.pdfTema Identificar Relaciones y Casos de Uso 19-05-24.pdf
Tema Identificar Relaciones y Casos de Uso 19-05-24.pdf
 
Época colonial: vestimenta, costumbres y juegos de la época
Época colonial: vestimenta, costumbres y juegos de la épocaÉpoca colonial: vestimenta, costumbres y juegos de la época
Época colonial: vestimenta, costumbres y juegos de la época
 
a propósito de la globalización y sus efectos
a propósito de la globalización y sus efectosa propósito de la globalización y sus efectos
a propósito de la globalización y sus efectos
 
2.15. Calendario Civico Escolar 2024.docx
2.15. Calendario Civico Escolar 2024.docx2.15. Calendario Civico Escolar 2024.docx
2.15. Calendario Civico Escolar 2024.docx
 
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
 
Resumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos Escolares
Resumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos EscolaresResumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos Escolares
Resumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos Escolares
 

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

  • 1. Ruby on Rails Master Universitario en Desarrollo e Integración de Soluciones Software Universidad de Deusto Día 2 miércoles 2 de febrero de 2011
  • 2. ¿Qué hicimos ayer? • Registro de usuarios • Login y logout de usuarios • Tests unitarios del modelo usuarios miércoles 2 de febrero de 2011
  • 4. Vistas y Helpers miércoles 2 de febrero de 2011
  • 5. /app/controllers/ sessions_controller.rb /logs/development.log miércoles 2 de febrero de 2011
  • 6. Rutas y helpers /app/layouts/ application.html.erb /app/views/sessions/ new.html.erb miércoles 2 de febrero de 2011
  • 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_path miércoles 2 de febrero de 2011
  • 8. ¿Preguntas sobre lo de ayer? miércoles 2 de febrero de 2011
  • 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_tweets miércoles 2 de febrero de 2011
  • 10. Test funcionales /test/functional/users_controller_test.rb miércoles 2 de febrero de 2011
  • 11. ... para login/logout también /test/functionals/sessions_controller_test.rb miércoles 2 de febrero de 2011
  • 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.rb miércoles 2 de febrero de 2011
  • 13. Ejecutamos todos los tests, tanto Unit como Functional $ rake test miércoles 2 de febrero de 2011
  • 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. Siguiente Ahora que ya estamos loggeados, necesitamos poder publicar tweets miércoles 2 de febrero de 2011
  • 16. Demo miércoles 2 de febrero de 2011
  • 17. Modelo Tweet $ rails generate scaffold Tweet content:string user:references $ rake db:migrate miércoles 2 de febrero de 2011
  • 18. Modelo Tweet Active Record nos “regala” métodos para definir relaciones entre modelos miércoles 2 de febrero de 2011
  • 19. Rails console $ rails console miércoles 2 de febrero de 2011
  • 20. Lo que sale del scaffold Lo que queremos conseguir miércoles 2 de febrero de 2011
  • 21. Poblamos la base de datos con datos de prueba con un “rake task” /lib/tasks/tweets.rake miércoles 2 de febrero de 2011
  • 22. /app/views/tweets/index.html.erb Lo que sale del scaffold Modificado miércoles 2 de febrero de 2011
  • 23. Helper miércoles 2 de febrero de 2011
  • 24. ¡A programar! miércoles 2 de febrero de 2011
  • 25. Ahora queremos ahorrarle un click al usuario incluyendo el el formulario directamente en el listado de tweets miércoles 2 de febrero de 2011
  • 26. 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
  • 27. miércoles 2 de febrero de 2011
  • 28. 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
  • 29. Esta es la función que comprueba que el usuario está loggeado antes de poder tweetear miércoles 2 de febrero de 2011
  • 30. 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
  • 31. Demo miércoles 2 de febrero de 2011
  • 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.erb miércoles 2 de febrero de 2011
  • 33. 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
  • 34. Tests! miércoles 2 de febrero de 2011
  • 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.rb miércoles 2 de febrero de 2011
  • 39. Nuestro primer test de integración miércoles 2 de febrero de 2011
  • 40. ¡Os toca! miércoles 2 de febrero de 2011
  • 41. Ajax miércoles 2 de febrero de 2011
  • 42. Demo miércoles 2 de febrero de 2011
  • 43. Prototype: Librería Javascript Así incluimos la librería javascript Este es el HTML que genera miércoles 2 de febrero de 2011
  • 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 remota miércoles 2 de febrero de 2011
  • 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. /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. 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 tweets miércoles 2 de febrero de 2011
  • 48. miércoles 2 de febrero de 2011