Creando una Aplicación Web similar a SoundCloud con Ruby on Rails 6 y Angular 10 – Parte 3
En esta página:
En la Parte anterior llamada Creando una Aplicación Web similar a SoundCloud con Ruby on Rails 6 y Angular 10 – Parte 2 instalamos la gema mysql2 que me permite integrar Ruby on Rails 6 con la base de datos MySQL, luego creamos la base de datos con el nombre soundcloudbd y con codificación utf8mb4_unicode_ci, luego creamos los modelos de las migraciones para todas las tablas del proyecto, en esta Parte 3 vamos a crear los campos de cada cada tabla, definiremos las relaciones correspondientes, entre otras tareas, vamos con ello.
Partes
Antes de continuar te invito a leer los siguientes artículos:
- Que es Ruby on Rails (RoR) y otros detalles
- Tu primer Hola Mundo con Ruby on Rails
- Como crear un CRUD con Ruby on Rails 6 y Bootstrap 4 – Parte 1
- Como Integrar React JS (16.13.1) en Ruby on Rails (6.0.3.2)
- Lee más artículos en la categoría Ruby on Rails.
Asimismo te invito a escuchar el Podcast: “Porque Algunos Desarrolladores no Terminan El Proyecto de Un Cliente”:
Spotify: | Sound Cloud: |
Bien ahora continuemos con el Post: Creando una Aplicación Web similar a SoundCloud con Ruby on Rails 6 y Angular 10 – Parte 3.
Migraciones
Ahora vamos a definir los campos de cada tabla en los archivos de migraciones que creamos en la Parte 2 de este tutorial, para no perdernos, es importante recordar que los archivos con las migraciones se encuentran en db > migrate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/soundcloudapp ├── /app ├── /bin ├── /config ├── /db ├── /migrate // Directorio de Migraciones ├── 20200829164315_create_usuarios.rb ├── 20200829165846_create_configuracions.rb ├── 20200829170525_create_cancionesusuarios.rb ├── 20200829171011_create_historialreproduccions.rb ├── development.sqlite3 ├── schema.rb ├── seeds.rb ├── /lib ├── /log ├── /node_modules ├── /public ├── /storage ├── /test ├── /tmp ├── /vendor ├── .browserslistrc ├── .ruby-version ├── babel.config.js ├── config.ru ├── Gemfile // Abro este Archivo ├── Gemfile.lock ├── package.json ├── postcss.config.js ├── Rakefile ├── yarn.lock |
Bien entonces primero comencemos con la tabla usuarios.
Tabla usuarios
Abrimos el archivo 20200829164315_create_usuarios.rb, definimos los campos nombresyapellidos, email, foto, facebook, twitter, instagram, generosfavoritos, artistasfavoritos y albunesfavoritos.
Luego hago referencia a la tabla cancionesusuarios, configuracions e historialreproduccions, el nombre lo colocamos en Singular porque si no lo hacemos, las referencias no tendrán efecto y te dará error.
Por último agregamos 3 claves foráneas (foreign keys) a las referencias de las tablas cancionesusuarios, configuracions e historialreproduccions, aca si colocamos los nombres de las tablas en Plural, no hay problema.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
class CreateUsuarios < ActiveRecord::Migration[6.0] def change create_table :usuarios do |t| # Campos tabla 'usuarios' t.string :nombresyapellidos t.string :email t.string :foto t.string :facebook t.string :twitter t.string :instagram t.string :generosfavoritos t.string :artistasfavoritos t.string :albunesfavoritos # Hacemos referencia a la tabla 'cancionesusuarios', el nombre de la tabla lo escribimos en Singular t.references :cancionesusuario, null: false # Hacemos referencia a la tabla 'configuracions', el nombre de la tabla lo escribimos en Singular t.references :configuracion, null: false # Hacemos referencia a la tabla 'historialreproduccions', el nombre de la tabla lo escribimos en Singular t.references :historialreproduccion, null: false # Columna para la fecha de creación y actualización de un registro t.timestamps # Columna para la fecha de eliminación de un registro t.column :deleted_at, :datetime, :limit => 6 end # Agregamos Clave Foranea (Foreign Key) a las referencias # Los nombres de las tablas se definen en Plural add_foreign_key :usuarios, :cancionesusuarios add_foreign_key :usuarios, :configuracions add_foreign_key :usuarios, :historialreproduccions end end |
Tabla configuracion
Ahora crearemos la tabla para configuracions que servirá para que el usuario almacene la configuración de su cuenta, abrimos el archivo 20200829165846_create_configuracions.rb y definimos los campos idioma, categoria, titulocanalpersonalizado y nombreautorpersonalizado.
Debajo creo un campo llamado usuarios_id para hacer referencia a un determinado id de la tabla usuarios.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class CreateConfiguracions < ActiveRecord::Migration[6.0] def change create_table :configuracions do |t| # Campos tabla 'configuracions' t.string :idioma t.string :categoria t.string :titulocanalpersonalizado t.string :nombreautorpersonalizado # Referencia a la tabla 'usuarios' t.integer :usuarios_id # Columna para la fecha de creación y actualización de un registro t.timestamps # Columna para la fecha de eliminación de un registro t.column :deleted_at, :datetime, :limit => 6 end end end |
Tabla cancionesusuario
En esta tabla vamos a guardar las pistas o canciones que el usuario suba a su cuenta, abrimos el archivo 20200829170525_create_cancionesusuarios.rb y agregamos los campos nombre, genero, fotoportada y archivo. Asimismo creo un campo llamado usuarios_id para hacer referencia a un determinado id de la tabla usuarios.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class CreateCancionesusuarios < ActiveRecord::Migration[6.0] def change create_table :cancionesusuarios do |t| # Campos tabla 'cancionesusuarios' t.string :nombre t.string :genero t.string :fotoportada t.string :archivo # Referencia a la tabla 'usuarios' t.integer :usuarios_id # Columna para la fecha de creación y actualización de un registro t.timestamps # Columna para la fecha de eliminación de un registro t.column :deleted_at, :datetime, :limit => 6 end end end |
Tabla historialreproducciones
En esta tabla vamos a guardar un historial de las canciones que un usuario ha escuchado en la plataforma, abrimos el archivo 20200829171011_create_historialreproduccions.rb y agregamos los campos nombre, artista y genero.
También creo un campo llamado usuarios_id para hacer referencia a un determinado id de la tabla usuarios.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class CreateHistorialreproduccions < ActiveRecord::Migration[6.0] def change create_table :historialreproduccions do |t| # Campos tabla 'historialreproducciones' t.string :nombre t.string :artista t.string :genero # Referencia a la tabla 'usuarios' t.integer :usuarios_id # Columna para la fecha de creación y actualización de un registro t.timestamps # Columna para la fecha de eliminación de un registro t.column :deleted_at, :datetime, :limit => 6 end end end |
Bien ya definimos los campos para cada tabla en los archivos correspondientes, ahora vamos a proceder a crear las columnas, pero para evitar que nos de error en las referencias entre las tablas, primero vamos a ejecutar las migraciones para crear la tabla configuracion, cancionesusuario e historialreproducciones.
NOTA: El archivo de migración para la tabla usuarios llamado 20200829164315_create_usuarios.rb lo muevo a otro directorio para que no se ejecute).
Abro la consola de comandos y ejecuto el siguiente comando para proceder a ejecutar las migraciones para crear la tabla configuracion, cancionesusuario e historialreproducciones.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Comando para ejecutar las migraciones rake db:migrate == 20200829165846 CreateConfiguracions: migrating ============================= -- create_table(:configuracions) -> 0.1400s == 20200829165846 CreateConfiguracions: migrated (0.1402s) ==================== == 20200829170525 CreateCancionesusuarios: migrating ========================== -- create_table(:cancionesusuarios) -> 0.1389s == 20200829170525 CreateCancionesusuarios: migrated (0.1390s) ================= == 20200829171011 CreateHistorialreproduccions: migrating ===================== -- create_table(:historialreproduccions) -> 0.1860s == 20200829171011 CreateHistorialreproduccions: migrated (0.1861s) ============ |
Entonces si voy a mi phpMyAdmin, puedo ver que se me han creado las tablas configuracion, cancionesusuario e historialreproducciones con sus respectivos campos.
Tabla configuracion
Tabla cancionesusuario
Tabla historialreproducciones
Bien, ahora pasare a crear la tabla usuarios, esta vendría a ser algo así como la tabla principal en donde se concentran todos los datos de los usuarios.
NOTA: Ahora los archivos de migración llamados 20200829165846_create_configuracions.rb, 20200829170525_create_cancionesusuarios.rb y 20200829171011_create_historialreproduccions.rb los muevo a otro directorio para que no se ejecuten, ya no los necesitamos y si los ejecutamos nuevamente, puede dar error).
Eso si, el archivo 20200829164315_create_usuarios.rb lo regreso al directorio de migraciones para ejecutarlo y poder crear la tabla usuarios.
Y abro la consola de comandos y ejecuto el siguiente comando para proceder con la creación de la tabla usuarios.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Comando para ejecutar la migracion de la tabla 'usuarios' rake db:migrate == 20200829164315 CreateUsuarios: migrating =================================== -- create_table(:usuarios) -> 0.1394s -- add_foreign_key(:usuarios, :cancionesusuarios) -> 0.5658s -- add_foreign_key(:usuarios, :configuracions) -> 0.5681s -- add_foreign_key(:usuarios, :historialreproduccions) -> 0.4908s == 20200829164315 CreateUsuarios: migrated (1.7645s) ========================== |
Si voy nuevamente a mi phpMyAdmin, puedo ver que se me han creado las tablas usuarios con sus respectivos campos.
Tabla usuarios
Y bueno hasta aquí terminamos esta tercera parte en donde hemos creado los campos para cada tabla del proyecto y hemos creado los campos para hacer referencia entre las tablas. Cuando trabajemos con los modelos utilizaremos los métodos para hacer relaciones como has_many.
Ten Paciencia, lo que quiero es que entiendas todo el proceso para Crear este Proyecto y no llenarte el capitulo de mucho contenido porque te puedes marear y no tendrás un óptimo aprendizaje.
Nota (s)
- Los Pasos y opciones mencionadas en este capitulo del tutorial pueden cambiar, esto no depende de nosotros, si no de las empresas que dan soporte a estas herramientas como la Gema mysql2 y Ruby on Rails (RoR), que suelen cambiar sus opciones de despliegue y configuración en futuras versiones.
- En la siguiente parte vamos a crear los controladores para los módulos de la aplicación.
- No olvides que debemos utilizar la tecnología para hacer cosas buenas por el mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.
- Ruby on Rails Tutoriales
- 05-10-2020
- 21-10-2021
- Crear un Post - Eventos Devs - Foro