Cómo usar el ORM de Ruby on Rails
El ORM de Ruby on Rails se llama Active Record, y es una de las partes más poderosas del framework. Gracias a él puedes trabajar con bases de datos usando objetos Ruby, sin escribir SQL manual (aunque puedes hacerlo cuando lo necesites).
En este post construiremos un ejemplo simple usando el ORM, donde gestionaremos libros, autores y categorías. Veremos cómo crear el proyecto, configurar la base de datos, generar modelos, migrar tablas y realizar consultas típicas.
¿Qué es Active Record?
Active Record es la capa del MVC encargada de gestionar los datos. Cada tabla de la base de datos se representa como una clase Ruby, y cada fila como un objeto.
Ejemplo:
La tabla users corresponde al modelo:
1
2
class User < ApplicationRecord
end
1. Setup Rails
Para comenzar con el setup de Rails, lo primero es preparar el entorno y crear un nuevo proyecto.
- 1. Abrir una línea de comandos (Terminal)
- Presiona la combinación Cmd + Space para abrir el Spotlight, luego escribe “Terminal” y presiona Enter.
- 2. Navegar a la ubicación deseada
- Una vez que tengas la terminal abierta, usa el comando
cdpara cambiar a la ubicación donde trabajarás tu proyecto. Por ejemplo, si deseas ir a la carpeta Documentos:1
cd ~/Documents/ - 3. Crear el proyecto
- Usando el comando
railsseguido del nombre para el proyecto y le indicamos que lo configure para usar Postgres. Por ejemplo:1
rails new bookstore -d postgresql
Puedes usar SQLite si quieres, solo cambia la opción
-d sqlite3.- 4. Ingresar al proyecto
- Con el comando
cdaccede al proyecto generado:1
cd bookstore - 5. Crear la base de datos
- Con el comando
dble podemos decir que proceda a crear la base de datos:1
rails db:create
Cuando instalas PostgreSQL con Homebrew, se crea automáticamente un rol en Postgres con el mismo nombre que tu usuario de macOS. Por eso, al ejecutar
rails db:createsin especificar usuario ni contraseña, Rails usa ese rol por defecto y la base de datos se crea sin problemas.- 1. Abrir una línea de comandos (Terminal)
- Presiona la combinación Ctrl + Alt + T para abrir la Terminal:
- 2. Navegar a la ubicación deseada
- Una vez que tengas la terminal abierta, usa el comando
cdpara cambiar a la ubicación donde trabajarás tu proyecto. Por ejemplo, si deseas ir a la carpeta Documentos:1
cd ~/Documents/ - 3. Crear el proyecto
- Usando el comando
railsseguido del nombre para el proyecto y le indicamos que lo configure para usar Postgres. Por ejemplo:1
rails new bookstore -d postgresql
Puedes usar SQLite si quieres, solo cambia la opción
-d sqlite3.- 4. Ingresar al proyecto
- Con el comando
cdaccede al proyecto generado:1
cd bookstore - 5. Crear la base de datos
- Con el comando
dble podemos decir que proceda a crear la base de datos:1
rails db:create
Cuando instalas PostgreSQL con Homebrew, se crea automáticamente un rol en Postgres con el mismo nombre que tu usuario de macOS. Por eso, al ejecutar
rails db:createsin especificar usuario ni contraseña, Rails usa ese rol por defecto y la base de datos se crea sin problemas.- 1. Abrir una línea de comandos o símbolo de sistema (CMD)
- Presiona la combinación Win + R para abrir la ventana de “Ejecutar” y escribe “cmd”.
- 2. Navegar a la ubicación deseada
- Con el comando
cdcambiamos a la ubicación donde trabajarás tu proyecto. Por ejemplo:1
cd %UserProfile%\Documents - 3. Crear carpeta con el nombre del proyecto y entrar en ella
- Usando el comando
mkdirse crea la carpeta y luego concdaccedes a la misma:1
mkdir bookstore && cd bookstore
Comprobamos la creación de la base de datos:
2. Crear los modelos
En el proyecto bookstore se definen tres modelos principales que conforman la base del dominio de la aplicación:
Book: representa el libro.Author: representa un autor.Category: representa una categoría literaria.
Estas relaciones y atributos se encuentran representados en el siguiente diagrama de clases:
classDiagram
class Author {
id : integer
name : string
bio : text
created_at : datetime
updated_at : datetime
}
class Category {
id : integer
name : string
created_at : datetime
updated_at : datetime
}
class Book {
id : integer
title : string
price : decimal
author_id : integer
category_id : integer
created_at : datetime
updated_at : datetime
}
Author "1" --> "0..*" Book : escribe
Category "1" --> "0..*" Book : clasifica
1
2
3
rails generate model Author name:string bio:text
rails generate model Category name:string
rails generate model Book title:string price:decimal author:references category:references
Rails generará:
- Los modelos dentro de
app/models/ - Las migraciones dentro de
db/migrate/
En la imagen se observa la definición de los modelos del proyecto y sus relaciones dentro de una aplicación con Rails:
- Author y Category son modelos base que heredan de
ApplicationRecordy representan entidades independientes del sistema. - Book es el modelo central y establece relaciones mediante
belongs_tocon Author y Category, lo que indica que cada libro está asociado a un autor y a una categoría. - Esta estructura refleja una relación uno a muchos, donde un autor puede tener varios libros y una categoría puede agrupar múltiples libros.
En la imagen se muestra la definición de las migraciones de base de datos del proyecto:
- Se observan las migraciones para Author, Category y Book, encargadas de crear las tablas correspondientes en la base de datos.
- Las tablas authors y categories contienen atributos básicos como
namey marcas de tiempo (timestamps). - La tabla books incluye atributos propios (
title,price) y referencias (authorycategory) con claves foráneas, asegurando la integridad referencial. - Esta configuración refleja a nivel de base de datos las relaciones definidas previamente en los modelos.
3. Aplicar las migraciones
Usando el comando rails db ejecutas la migración:
1
rails db:migrate
4. Relacionar los modelos con Active Record
Rails ya conoce las relaciones gracias a references, pero las debemos declarar en los modelos.
app/models/author.rb
1
2
3
class Author < ApplicationRecord
has_many :books
end
app/models/category.rb
1
2
3
class Category < ApplicationRecord
has_many :books
end
app/models/book.rb
1
2
3
4
class Book < ApplicationRecord
belongs_to :author
belongs_to :category
end
Con esto Active Record genera métodos automáticos como:
author.bookscategory.booksbook.authorbook.category
5. Probando Active Record en la consola (Rails Console)
Podemos interactuar con nuestra base de datos desde:
1
rails console
Crear registros
1
2
3
4
5
6
7
8
9
10
11
12
13
a = Author.create(name: "Gabriel García Márquez")
c = Category.create(name: "Realismo Mágico")
Book.create(
title: "Cien años de soledad",
price: 15000,
author: a,
category: c
)
# o de forma más controlada:
book = Book.new(title: "El pistolero", price: 20000, author: c, category: cS)
user.save
Consultar registros
1
2
3
Book.first
Book.where(price: 10000..30000)
Author.find_by(name: "Gabriel García Márquez").books
Actualizar
1
2
book = Book.first
book.update(price: 21.99)
Eliminar
1
Book.last.destroy
6. Controladores y rutas (rápido)
Si quieres exponer libros en una API o vistas:
1
rails generate controller Books index show
En config/routes.rb:
1
resources :books
En app/controllers/books_controller.rb:
1
2
3
4
5
6
7
8
9
class BooksController < ApplicationController
def index
@books = Book.includes(:author, :category)
end
def show
@book = Book.find(params[:id])
end
end
Rails ya te da las rutas REST:
/books/books/:id
Rails hace que trabajar con una base de datos en un proyecto sea totalmente natural gracias a Active Record. Cada modelo se convierte en una clase Ruby completamente integrada con la base de datos, y las migraciones nos permiten evolucionar la estructura sin dolores de cabeza.
En este pequeño ejemplo ya logramos:
- Crear el proyecto bookstore
- Configurar la base de datos
- Definir modelos y relaciones
- Migrar tablas
- Hacer consultas con Active Record
- Preparar controladores y rutas básicas









