Creando una Aplicación Web similar a SoundCloud con Ruby on Rails 6 y Angular 10 – Parte 3

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:

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

/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.

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.

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.

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.

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.

# 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.

# 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.