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

Preview:

Citation preview

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

Recommended