Como crear un CRUD con Ruby on Rails 6 y Bootstrap 4 – Parte 2
Demo
En este Post voy a continuar con la Parte anterior llamada Como crear un CRUD con Ruby on Rails 6 y Bootstrap 4 – Parte 1, en donde instale el Lenguaje de Programación Ruby, luego desplegué el Framework Ruby on Rails 6, instale la Librería Bootstrap 4 con Popper JS y jQuery, con esto deje listo el entorno para crear el proyecto CRUD, en este capitulo voy a configurar la Base de Datos, crear los Modelos y las Migraciones para el CRUD, vamos con este Post.
Partes
Antes de continuar con este Post, si eres nuevo en Ruby on Rails te invito a leer el artículo Que es Ruby on Rails (RoR) y otros detalles, para que estés familiarizado con este Tutorial.
Base de Datos
Para mi Sistema CRUD voy a usar el motor de Base de Datos MySQL, voy a darle soporte para MySQL a Ruby on Rails, para este instalo la librería mysql2 que hasta la fecha de este Post se encuentra en la versión 0.5.3
Para instalar la librería mysql2 abro el archivo Gemfile que se encuentra en el directorio principal de Ruby on Rails
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
/app ├── /app ├── /bin ├── /config ├── /db ├── /lib ├── /log ├── /public ├── /storage ├── /test ├── /tmp ├── /vendor ├── .gitignore ├── .ruby-version ├── config.ru ├── Gemfile // Abre Este Archivo ├── Gemfile.lock ├── package.json ├── Rakefile ├── Gemfile.lock ├── README.md |
Copio el código de instalación de la librería mysql2 y lo pego en el archivo Gemfile
1 2 3 4 5 6 7 8 9 10 11 12 13 |
gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.7' gem 'mysql2', '~> 0.5.3' # Librería mysql2 gem 'bootsnap', '>= 1.4.2', require: false group :development, :test do gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end |
Luego ejecuto el siguiente comando para instalar la librería mysql2
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 |
bundle install Fetching gem metadata from https://rubygems.org/............. Fetching gem metadata from https://rubygems.org/. Resolving dependencies... Using rake 13.0.1 Using concurrent-ruby 1.1.5 ... ... ... (Continua la Instalación) ... ... Using tzinfo-data 1.2019.3 Using web-console 4.0.1 Using webdrivers 4.1.3 Using webpacker 4.2.0 Bundle complete! 15 Gemfile dependencies, 71 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. Post-install message from mysql2: ====================================================================================================== You've installed the binary version of mysql2. It was built using MySQL Connector/C version 6.1.11. It's recommended to use the exact same version to avoid potential issues. At the time of building this gem, the necessary DLL files were retrieved from: http://cdn.mysql.com/Downloads/Connector-C/mysql-connector-c-6.1.11-win32.zip This gem *includes* vendor/libmysql.dll with redistribution notice in vendor/README. ====================================================================================================== |
Con esto ya tengo soporte para trabajar con el motor de Base de Datos MySQL en Ruby on Rails.
Ahora voy a configurar la Base de Datos, mi base de datos la llamaré productos y dentro de ella crearé una tabla llamada postres que me servirá para trabajar con las tareas CRUD (Create, Read, Update, Delete).
Pero primero tengo que decirle a Ruby on Rails como se llama la Base de Datos que usaré, para esto abro el archivo database.yml que se encuentra en config > database.yml
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 |
/app ├── /app ├── /bin ├── /config ├── /environments ├── /initializers ├── /locales ├── application.rb ├── boot.rb ├── cable.yml ├── credentials.yml.enc ├── database.yml // Abre este archivo ├── environment.rb ├── master.key ├── puma.rb ├── routes.rb ├── storage.yml ├── webpacker.yml ├── /db ├── /lib ├── /log ├── /public ├── /storage ├── /test ├── /tmp ├── /vendor ├── .gitignore ├── .ruby-version ├── config.ru ├── Gemfile ├── Gemfile.lock ├── package.json ├── Rakefile ├── Gemfile.lock ├── README.md |
En el archivo database.yml agrego los siguiente valores en la línea development
1 2 3 4 5 6 7 8 9 10 |
development: adapter: mysql2 # Motor MySQL encoding: utf8 # Codificación database: productos # Nombre de la Base de Datos username: root # Usuario de la Base de Datos password: # Password de la Base de Datos host: 127.0.0.1 # Servidor port: 3306 # Puerto |
Bien ya tengo conectado Ruby on Rails a mi Base de Datos MySQL llamada productos
Modelo
Voy a crear el modelo que me permitirá usar mi tabla postres, para crear mi modelo voy a mi consola de comandos y ejecuto el siguiente comando para crear mi modelo postre, hasta la fecha de este Post, Ruby on Rails me pide que le de el nombre en singular a mi modelo, es decir postre y no postres
1 2 3 4 5 6 7 8 9 10 |
rails g model postre invoke active_record create db/migrate/20191227230259_create_postres.rb create app/models/postre.rb invoke test_unit create test/models/postre_test.rb create test/fixtures/postres.yml |
Tras ejecutar el comando anterior puedes ver que se me ha creado un archivo de migración llamado 20191227230259_create_postres.rb, el modelo con el nombre postre.rb, y 2 archivos de pruebas unitarias postre_test.rb y postres.yml, todos estos archivos Ruby on Rails los ha colocado en sus respectivas ubicaciones o directorios que se aprecian en la consola de comandos.
Migración
Necesito crear los campos para mi tabla postres en la Base de Datos, para esto voy a usar el archivo de migración llamado 20191227230259_create_postres que se me creo cuando realice la creación del modelo, este archivo se encuentra en db > migrate > 20191227230259_create_postres.rb
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 |
/app ├── /app ├── /bin ├── /config ├── /db ├── /migrate ├── 20191227230259_create_postres.rb // Archivo de Migración ├── development.sqlite3 ├── schema.rb ├── seeds.rb ├── /lib ├── /log ├── /public ├── /storage ├── /test ├── /tmp ├── /vendor ├── .gitignore ├── .ruby-version ├── config.ru ├── Gemfile // Abre Este Archivo ├── Gemfile.lock ├── package.json ├── Rakefile ├── Gemfile.lock ├── README.md |
Abro el archivo 20191227230259_create_postres.rb y agrego los campos para la tabla postres que son nombre, precio, stock, img, url, timestamps y deleted_at. El campo t.timestamps me crea automáticamente los campos created_at y updated_at en la tabla postres
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class CreatePostres < ActiveRecord::Migration[6.0] def change create_table :postres do |t| # Campos de mi tabla 'postres' t.string :nombre t.string :precio t.string :stock t.string :img t.string :url t.timestamps t.column :deleted_at, :datetime, :limit => 6 end end end |
Como ya definí los campos de mi tabla postres, ahora procederé a crear la tabla en la Base de Datos, para esto ejecuto el siguiente comando en la consola de comandos
1 2 3 4 5 6 7 8 |
rake db:migrate == 20191227230259 CreatePostres: migrating ==================================== -- create_table(:postres) -> 0.1764s == 20191227230259 CreatePostres: migrated (0.1765s) =========================== |
Con esto he creado la tabla postres en mi Base de Datos productos, si reviso mi Base de Datos, puedo ver que se ha creado la tabla postres con los campos correspondientes
Bueno con esto ya tengo creada y configurada mi Base de Datos productos con la tabla postres para mi Sistema CRUD.
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 los Desarrolladores que dan soporte a Ruby on Rails y a la librería mysql2, que suelen cambiar sus opciones de despliegue y configuración en futuras versiones.
- En el siguiente capitulo continuaré con la creación del Controlador del Sistema CRUD y otros detalles.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.
- Ruby on Rails Tutoriales
- 27-12-2019
- 08-10-2020
- Crear un Post - Eventos Devs - Foro
Social
Redes Sociales (Developers)
Redes Sociales (Digital)