en Blog profesional, Screencasts

Hoy vamos a ver como se crean, modifican y eliminan registros en una tabla de una base de datos Mysql en Rails, obviamente también todo el proceso para tener creada la base de datos.

Lo primero será crear el proyecto de Rails indicando que queremos mysql como motor de bases de datos, eso se hacía con la opción -d y luego mysql.

El proyecto se llamará railsymysql y con esto ya tenemos creada la estructura de ficheros necesaria.

Ahora lo primero será generar un modelo, al que vamos a llamar Usuario (los modelos se generan en singular en Rails)

Al crear el modelo creamos el fichero de migración inicial para definir nuestra base de datos y definimos el modelo en si como ActiveRecord

Antes de nada como tenemos vamos a usar MySQL tendremos que crear la base de datos y configurar el fichero /config/database.yml

En mi caso voy a usar de usuario edu y como contraseña password, así que configuramos esto en el mysql

En este punto procedemos a crear una tabla usuarios (plural del modelo) con sus campos, en este caso db/migrate/20161030125505_create_usuarios.rb

Y generaremos la migración

Y comprobamos en MySQL que se haya aplicado todo bien:

Ahora vamos a añadir una nueva columna, que se llame nickname y que vaya después de apellidos

Y editamos el fichero de la migración

Y ejecutamos la migración comprobando que termina, que vuelve al inicio (VERSION=0) y que vuelve al final:

Ahora ya podemos ver como en MySQL se ha creado

Una vez creado vamos a editar el campo nickname para que no pueda ser NULL y que sea un índice. Podríamos hacerlo deshaciendo los cambio y volviendo a una versión anterior, nuestro caso podríamos ver el status y luego decidir ir a la versión 20161030125505 y luego editar el fichero de migración, pero sería muy fácil.

Lo que queremos es crear una nueva migración que no sea reversible, es decir, crear una tabla es reversible porque se borra, pero modificar un campo no es directamente reversible ya que hay que indicar el cambio que hay que hacer y ya no nos serviría el método change de la migración teniendo que definir el método up y el método down.

Y modificaríamos el fichero de migración cambiando el método change por up y por down, muy importante que down se ejecute de forma simétria a up, primero lo último que hizo up y terminar por lo primero que se ejecutó en el método up.

Y comprobamos que todo funciona perfectamente

Ahora ya tenemos la tabla creada en nuestra base de datos y lo que vamos a hacer es jugar con los datos es guardarlos, buscarlos, modificarlos y borrarlos.

Para introducir datos lo que vamos a hacer es crear un objeto instanciado con el modelo Usuario, tal y como lo hemos creado antes.

Para hacer todo esto lo haremos desde la consola de rails. Hay que fijarse que además nos muestra el comando SQL que ejecuta.

Y en MySQL veremos reflejada la inserción

Ahora ya sabemos insertar datos en la base de datos ahora tenemos que buscar, para ello podemos hacerlo con el campo clave, el ID que automáticamente nos ha generado rails o por cualquier campo.

Para bucar por campo ID o usando search_by_xxxx

Vamos a moficar el apellido a Isidoro Gato, con el id número 5 y le vamos a poner de apellido Gato con Botas en vez de Gato

Y MySQL vemos el cambio

Aquí el problema es que hemos tenido que hacer tres cosas

  1. Buscar
  2. Modificar
  3. Guardar

Y lo podemos hacer juntando los pasos 2 y 3 mediante update_attributes, vamos a volver a ponerle de apellidos simplemente Gato

El resultado en ambos casos sería el mismo, sólo que con update_attributes nos ahorramos el guardar.

Ya sólo nos quedaría borrar un registro, eso lo haremos con destroy, que no es lo mismo que delete, en nuestro caso usaremos siempre destroy.

Ya sólo nos quedaría algo para bordar este post, que serían los named scopes, que vendría a ser algo parecido a una macro de SQL que nos permitirá reutilizar código y hacer la lectura y escritura de nuestro código más sencilla.

Los named scopes se llaman como si fueran métodos de ActiveRelation y requieren sintaxis lambda.

O con parámetros

Se definen en el directorio /app/models dentro de los modelos correspondientes, en nuestro caso definiremos una nueva columna en la base de datos y crearemos un scope para sacar todos aquellos visibles e invisbles:

Y configuraremos el fichero de esta manera

Luego haremos la migración

Y configuraremos en el fichero del modelo, en nuestro caso app/models/usuario.rb

Así tendremos por ejemplo:

Escribir un comentario

Comentario