Comprender los conceptos básicos de Ruby on Rails: bases de datos SQL y cómo funcionan

Después de aprender sobre Ruby, el primer paso que dimos fue comprender cómo funcionan la web y el ciclo de solicitud-respuesta de Ruby on Rails.

Ahora es el momento de aprender sobre las bases de datos y cómo se conectan con Ruby on Rails. Básicamente, la respuesta es el Modelo: el Mde MVC, como aprendimos aquí.

Antes de aprender desarrollo web con Rails, realmente recomiendo aprender sobre Ruby primero .

¡Vamos a empezar!

¿Que es una base de datos?

Hmmm… El primer pensamiento que me viene a la mente es algo que almacena datos.

¡Pero esta definición es bastante imprecisa! Una matriz, un hash, una lista vinculada o cualquier estructura de datos puede ser algo que pueda almacenar datos.

Cuando apaga la computadora, pierde todos los valores de datos que estaban almacenados en esa matriz (lo mismo que todas las estructuras de datos). Por lo tanto, no es una buena idea almacenar todos mis archivos precious data.

Necesitamos resolver dos problemas aquí:

  1. Almacenar datos y obtenerlos cuando queramos.
  2. Almacenar datos de forma organizada y estructurada, para que podamos obtenerlos fácilmente.

¿Debo almacenar todos los datos en un bloc de notas? Simplemente coloque toda la información en su interior separada por comas, guarde txt filey listo. Ahora puedo abrirlo y obtener todos los datos que quiero. Podemos almacenar datos y obtenerlos en cualquier momento ... ¡problema resuelto!

Resolvimos este problema, pero perdimos el otro. Ahora todos los datos están almacenados y no los perderemos. Pero no está bien estructurado en el archivo. Necesitamos la regla para almacenar y obtener datos de forma organizada y bien estructurada.

Pensemos en cómo podemos organizar los datos de una manera bien estructurada.

¿Qué hay de organizar todos los datos en tablas?

Entonces, aquí tenemos: el encabezado de la tabla ( nombre de las columnas: nombre, apellido, dirección, etc. ) que contiene los valores que almacenaremos. Por ejemplo, si queremos almacenar la cadena "Mickey" (el valor) , se almacenará en la columna "Nombre" .

  • Mesa : digamos personas
  • Columnas : nombre , apellido , dirección , etc.
  • Filas : en este caso, podemos decir que una fila puede ser una persona con, por ejemplo, nombre “ Mickey ” y apellido “ Ratón, dirección “123 Fantasy Way, etc.
  • Campos : todos los datos almacenados en la base de datos.

Y ahora tenemos una forma bien estructurada de almacenar datos : ¡en una tabla!

¿Qué tal obtener, eliminar, insertar y actualizar datos?

Usaremos el lenguaje SQL ( ¡no mencionaré el mundo NoSQL! ) Para manipular los datos. Consigamos lo básico.

  1. OBTENER: si queremos obtener todos los datos ( persona ) de la tabla Personas , debemos seleccionarlos de esa tabla.

El símbolo ( *) significa que seleccionará todas las columnas de la tabla Personas . Si podemos obtener todas las columnas, podemos especificar qué columnas necesitamos para esta selección.

2. BORRAR: queremos eliminar todos los datos de nuestra tabla Personas .

Pero no es común eliminar todos los datos de una tabla. Por lo general, usamos una condición para eliminar, como "Quiero eliminar a todas las personas menores de 21 años". ¡Aprenderemos cómo más adelante en esta publicación!

3. INSERTAR: insertaremos / almacenaremos datos en la tabla.

o podemos especificar en qué columnas queremos insertar datos.

4. ACTUALIZAR: hemos almacenado los datos, pero queremos actualizarlos.

Condiciones de uso en nuestras consultas

Ahora podemos usar el lenguaje SQL para consultar (seleccionar, eliminar, insertar, actualizar) datos.

  • Pero, ¿y si queremos eliminar solo los registros con el apellido Kinoshita ?
  • ¿O si queremos actualizar a una persona específica con nombre Leandro y apellido Kinoshita ?
  • ¿O simplemente seleccione todos los datos de la tabla de personas y ordénelos por edad de menor a mayor?

Sí, usamos condiciones como dónde y ordenar por, y operadores como o y y . Veamos algunos ejemplos:

  • Eliminando todos los registros de la tabla de personas con apellido Kinoshita .
  • Actualización de todos los registros de la tabla de personas con el nombre Leandro y el apellido Kinoshita .
  • Seleccionar todos los registros de la tabla de personas pero ordenarlos por edad (en orden ascendente → ASC).

Relación entre tablas

Sabemos ejecutar consultas (con o sin condiciones). Entendamos cómo funcionan las relaciones de las tablas.

  • Uno a uno (1–1) : se trata de una relación entre dos tablas en las que una solo puede pertenecer a la otra. Por ejemplo, una persona tiene un pasaporte y ese pasaporte pertenece a esa persona específica. Entonces, en este ejemplo, tenemos personas de mesa, pasaportes de mesa y una relación 1–1.
  • Uno a muchos (1-n) : se trata de una relación entre dos tablas en la que un registro de una tabla puede hacer referencia a muchos registros de otra. Por ejemplo, imagine una plataforma de comercio electrónico: usuarios, pedidos, productos, pagos, etc. Un usuario puede tener muchos pedidos y cada pedido pertenece a ese usuario específico. Entonces, en este ejemplo, tenemos usuarios de tabla, pedidos de tabla y una relación 1-n.
  • Many to Many (nn) : se trata de una relación entre dos tablas en la que un registro de una tabla puede hacer referencia a muchos registros de otra. Y un registro de otro también puede hacer referencia a muchos registros de uno. Por ejemplo , tenemos de nuevo la plataforma de comercio electrónico: dividimos los productos en categorías. Una categoría tiene muchos productos (la categoría Tecnología tiene muchos productos como teléfonos móviles, portátiles, etc.) y un producto puede pertenecer a muchas categorías (el producto Teléfono móvil pertenece a las Categorías de tecnología y electrónica). Entonces, en este ejemplo, tenemos Productos de tabla, Categorías de tabla y una relación nn.

Modo de rieles activado

Ahora entendemos el significado de las bases de datos, hemos probado algunas consultas básicas y hemos hablado sobre la relación entre tablas. Pero, ¿cómo podemos utilizar ese conocimiento en Ruby on Rails y en el mundo del desarrollo web ?

En primer lugar: Rails es Rails . La base de datos es base de datos . Es obvio? Pero la gente generalmente se confunde con eso.

Un modelo de usuario puede representar una tabla de usuarios . Pero el modelo no es la mesa.

  • En la base de datos , tenemos tablas y filas.
  • Sobre rieles , tenemos modelos (clases) y objetos.

Imagínese un sitio de blogs. El blog necesita un autor para cada publicación. Entonces creamos una tabla de Autores con algunas columnas (primer nombre, apellido, etc.):

En la migración, añadimos columnas first_name, last_name, email, birthday, created_at, y updated_at. ( created_aty updated_atson creados por el t.timestampscódigo).

Así creamos una migración (código Ruby), ejecute el rake db:migratecomando en el terminal, y se genera una tabla Authorscon first_name, last_name, email, birthday, created_at, y updated_atcolumnas.

De vuelta a Rails, podemos crear un Authormodelo:

Entonces ahora tenemos una Authorstabla con algunas columnas y un Authormodelo.

Uso de la consola Rails

Abra la terminal y escriba bundle exec rails c. Recuerde, estamos en la consola de RAILS , por lo que tenemos clases, objetos, atributos, etc.

Relaciones sobre rieles

Creamos una Authorstabla / modelo. Lo que necesitamos ahora es una Poststabla / modelo. Un autor tiene muchas publicaciones y una publicación pertenece a un autor específico. La relación aquí es de uno a muchos ( 1-n ). ¿Recuerda?

Entonces, cuando creamos una Poststabla, necesitamos almacenar una referencia al autor de la publicación (columna author_id en la tabla Publicaciones ). Se conoce como Foreign Key.

¿Y cómo relacionamos los modelos?

has_manypublicaciones de autor

la publicación pertenece a un autor

Uso de la consola Rails

* Explicación rápida sobre has_manyy belongs_to. Ambos codesson métodos definidos en ActiveRecordclase. Puedes ver que creamos nuestros modelos heredando ActiveRecord::Base.

¿Recuerdas en mi artículo de Ruby Foundation que aprendimos sobre la programación orientada a objetos, la parte de herencia? Es por eso que podemos usar los métodos has_manyy belongs_tosin definirlos en ninguna parte de nuestra aplicación. Rails lo maneja por nosotros.

Si desea comprender este concepto en profundidad, clone el repositorio de Rails o consulte Behind the Scenes of the 'Has Many' Active Record Association.

Consultas sobre rieles

Podemos consultar usando métodos ActiveRecord:

  • all : Obtiene todos los objetos de un modelo específico.

Detrás de escena, está ejecutando la SELECT * FROM postsconsulta.

  • find : usando find podemos obtener el objeto por el id (clave principal).

Detrás de escena, está ejecutando una SELECT * FROM posts WHERE id = 1consulta.

  • donde : Obtiene los objetos que pasan las condiciones.

Detrás de escena, está ejecutando una SELECT * FROM posts WHERE title = 'Database & Rails'consulta.

  • orden : ordena todos los objetos según una columna.

Detrás de escena, está ejecutando una SELECT * FROM posts ORDER BY created_at DESCconsulta.

¡Eso es todo!

Aprendimos mucho aquí. Espero que aprecien el contenido y aprendan más sobre cómo funcionan los modelos de bases de datos y rieles.

Este es un paso más en mi viaje para aprender y dominar Rails y el desarrollo web. Puede ver la documentación de mi viaje completo aquí en mi publicación Renaissance Developer .

Si desea un curso completo de Ruby y Rails, aprenda habilidades de codificación del mundo real y cree proyectos, pruebe One Month Ruby Bootcampy Rails Bootcamp . Nos vemos allí ☺

Diviértete y sigue aprendiendo y codificando.

Mi Twitter y Github. ☺