Creando un Tinder

Parte 1, Modelos y Test

Definir el modelo y los requisitos

Vamos a crear un clon básico de Tinder, en esta guía abordaremos el tema de los likes y matchs.

Tinder es un aplicación que te permite hacer like o dislike a muchos usuarios y si dos usuarios se hacen like mutuamente estos pueden comunicarse.

Primero necesitamos un modelo que sea capaz de guardar a los usuarios y sus fotos.

Además debemos guardar la información de las interacciones, una interacción puede ser de like o dislike, y necesitamos guardar ambas para no mostrar nuevamente a los usuarios con las que ya hemos interactuado.

Y por último sería útil guardar los matches, no es necesario que estos estén relacionados con las interacciones puesto que una vez que ya identifcamos y creamos el match no las necesitamos.

Crear el modelo en rails de usuarios

El modelo de usuario lo crearemos directamente con devise.

Primero instalamos la gema

Luego corremos el gerador de devise

Corremos las migraciones

Generamos las vistas

Crear el modelo en rails de interacciones

Aquí es donde se pone un poco más difícil, primero tenemos que crear el modelo con el generador, pero tenemos que tener cuidado con las referencias a usuario, puesto que hay dos y por lo mismo hay que nombrarlas.

Antes de correr las migraciones vamos a editar el archivo para agregar las claves foraneas

La migración de interacciones debería quedar así

El paso siguiente es crear tests para validar las reglas del negocio, particularmente nos interesa que:

Un usuario no puede interactuar consigo mismo:

Un usuario si puede interactuar con otros usuarios:

Un usuario no pueda interactuar dos veces con otro usuario:

Si dos usuarios interactúan y se gustan entonces debe generarse un match:

Y si dos usuarios interactúan y no se gustan entonces no debe generarse un match:

Creando el modelo en rails de match

Ahora estamos hablando de matches y no tenemos un modelo para match, ahora la idea aquí es muy similar, son las mismas relaciones.

Debemos hacer la misma modificación que hicimos previamente con las interacciones.

Con los modelos listos ya podemos correr los tests, pero hasta que no hagamos las validaciones y las relaciones no lograremos pasarlos.

Para el modelo user.rb:

Para el modelo interaction.rb

La línea 2 y 3 crean las relaciones con el modelo de usuario, es necesario especificar la clase puesto que al cambiarle el nombre rails no es capaz de deducirlo.

La línea 5 valida que la interacción sea única.

La línea 6 y el método cantinteractmyself validan que el usuario no pueda interactuar con el mismo

Finalmente la línea 7 y el método check_match ingresan automáticamente un match cuando existe la interacción de like del usuario 1 al 2 y del usuario 2 al 1.

Para el modelo de match.rb

En los registros de match no nos importa quien hizo match con quien, por lo mismo agregaremos un método que necesitaremos después que nos permite obtener quien es la persona a la que se hizo match dado el otro usuario.

Si quieres aprender a hacer más cosas como éstas y dedicarte de lleno del desarrollo con RoR, te recomiendo te sumes a nuestro bootcamp.

Share Button

Director de DesafíoLatam. Ingeniero Civil Informático de la Universidad Federico Santa María. Emprendedor lean, dedicado al desarrollo de una mejor web con ruby on rails. Fanático de los números y las métricas, la música y la fotografía.