Sei sulla pagina 1di 4

1 ¿Qué es Active Record?

Active Record es la M en MVC , el modelo, que es la capa del sistema responsable de representar los datos y la lógica
del negocio. Active Record facilita la creación y el uso de objetos comerciales cuyos datos requieren un
almacenamiento persistente en una base de datos. Es una implementación del patrón de registro activo, que en sí es
una descripción de un sistema de asignación de mapas relacionales de objetos.
1.1 El patrón de registro activo
Active Record fue descrito por Martin Fowler en su libro Patterns of Enterprise Application Architecture . En Active
Record, los objetos llevan datos persistentes y comportamiento que opera sobre esos datos. Active Record tiene la
opinión de que garantizar la lógica de acceso a los datos como parte del objeto educará a los usuarios de ese objeto
sobre cómo escribir y leer desde la base de datos.
1.2 Asignación relacional de objetos
El mapeo relacional de objetos , comúnmente denominado abreviatura ORM, es una técnica que conecta los objetos
enriquecidos de una aplicación a tablas en un sistema de gestión de bases de datos relacionales. Al utilizar ORM, las
propiedades y relaciones de los objetos en una aplicación se pueden almacenar y recuperar fácilmente desde una base
de datos sin escribir sentencias SQL directamente y con menos código de acceso a la base de datos en general.
Si no está lo suficientemente familiarizado con los sistemas de administración de bases de datos relacionales (RDBMS)
o el lenguaje de consulta estructurado (SQL), consulte este tutorial (o este ) o estudielos por otros medios. Comprender
cómo funcionan las bases de datos relacionales es crucial para comprender los registros activos y los rieles en general.

1.3 Registro activo como un marco ORM


Active Record nos brinda varios mecanismos, el más importante es la capacidad de:
 Representar modelos y sus datos.
 Representar asociaciones entre estos modelos.
 Representar jerarquías de herencia a través de modelos relacionados.
 Valide los modelos antes de que persistan en la base de datos.
 Realice operaciones de base de datos de forma orientada a objetos.
2 Convención sobre configuración en registro activo
Al escribir aplicaciones que usan otros lenguajes o marcos de programación, puede ser necesario escribir una gran
cantidad de código de configuración. Esto es particularmente cierto para los marcos ORM en general. Sin embargo, si
sigue las convenciones adoptadas por Rails, necesitará escribir muy poca configuración (en algunos casos sin
configuración) al crear modelos Active Record. La idea es que si configura sus aplicaciones de la misma manera la
mayor parte del tiempo, esta debería ser la forma predeterminada. Por lo tanto, la configuración explícita sería
necesaria solo en aquellos casos en los que no se pueda seguir la convención estándar.
2.1 Convenciones de nomenclatura
De manera predeterminada, Active Record usa algunas convenciones de nomenclatura para descubrir cómo se debe
crear la asignación entre los modelos y las tablas de la base de datos. Rails pluralizará sus nombres de clase para
encontrar la tabla de base de datos respectiva. Entonces, para una clase Book, debe tener una tabla de base de datos
llamada libros . Los mecanismos de pluralización de Rails son muy potentes, ya que son capaces de pluralizar (y
singularizar) palabras regulares e irregulares. Al usar nombres de clase compuestos por dos o más palabras, el nombre
de la clase modelo debe seguir las convenciones de Ruby, usando el formulario CamelCase, mientras que el nombre
de la tabla debe contener las palabras separadas por guiones bajos. Ejemplos:
 Tabla de base de datos: plural con guiones bajos que separan las palabras (p book_clubs. Ej., ).
 Clase de modelo: Singular con la primera letra de cada palabra en mayúscula (por ejemplo,BookClub).
Modelo / Clase Tabla / Esquema

Article articles

LineItem line_items

Deer deers

Mouse mice

Person people

2.2 Convenciones de esquema


Active Record utiliza convenciones de nomenclatura para las columnas de las tablas de la base de datos, según el
propósito de estas columnas.
 Las claves externas - Estos campos deben ser nombrados siguiendo el
patrónsingularized_table_name_id(por ejemplo, item_id, order_id). Estos son los campos que Active
Record buscará cuando cree asociaciones entre sus modelos.
 Claves principales : de manera predeterminada, Active Record usará una columna entera
nombrada idcomo la clave principal de la tabla. Al usar Migraciones de Active Record para crear sus tablas,
esta columna se creará automáticamente.
También hay algunos nombres de columna opcionales que agregarán características adicionales a las instancias de
Active Record:
 created_at - Se establece automáticamente en la fecha y hora actual cuando se crea el registro por primera
vez.
 updated_at - Se configura automáticamente a la fecha y hora actuales cada vez que se actualiza el registro.
 lock_version- Agrega bloqueo optimista a un modelo.
 type- Especifica que el modelo usa herencia de tabla única .
 (association_name)_type- Almacena el tipo de asociaciones polimórficas .
 (table_name)_count- Se utiliza para almacenar en caché el número de objetos pertenecientes a las
asociaciones. Por ejemplo, una comments_countcolumna en una Articleclase que tiene muchas instancias
de Commentva a guardar en caché el número de comentarios existentes para cada artículo.
Si bien estos nombres de columna son opcionales, de hecho están reservados por Active Record. Manténgase alejado
de las palabras clave reservadas a menos que desee la funcionalidad adicional. Por ejemplo, typees una palabra clave
reservada usada para designar una tabla usando la herencia de tabla única (STI). Si no está utilizando STI, pruebe con
una palabra clave análoga como "contexto", que aún puede describir con precisión los datos que está modelando.

3 Creación de modelos de registro activo


Es muy fácil crear modelos de Active Record. Todo lo que tienes que hacer es subclasificar
la ApplicationRecordclase y estarás listo:
class Product < ApplicationRecord
end
Esto creará un Productmodelo, mapeado a una productstabla en la base de datos. Al hacer esto también tendrá la
capacidad de asignar las columnas de cada fila en esa tabla con los atributos de las instancias de su
modelo. Supongamos que la productstabla se creó utilizando una instrucción SQL (o una de sus extensiones) como:
CREATE TABLE products (
id int(11) NOT NULL auto_increment,
name varchar(255),
PRIMARY KEY (id)
);
El esquema anterior declara una tabla con dos columnas: idy name. Cada fila de esta tabla representa un producto
determinado con estos dos parámetros. Por lo tanto, podría escribir código como el siguiente:
p = Product.new
p.name = "Some Book"
puts p.name # "Some Book"
4 Anulación de las convenciones de nomenclatura
¿Qué sucede si necesita seguir una convención de nomenclatura diferente o si necesita usar su aplicación Rails con
una base de datos heredada? No hay problema, puede anular fácilmente las convenciones predeterminadas.
ApplicationRecordhereda de ActiveRecord::Base, que define una cantidad de métodos útiles. Puede usar
el ActiveRecord::Base.table_name= método para especificar el nombre de la tabla que se debe usar:
class Product < ApplicationRecord
self.table_name = "my_products"
end
Si lo hace, deberá definir manualmente el nombre de la clase que aloja los dispositivos (my_products.yml) usando
el set_fixture_classmétodo en su definición de prueba:
class ProductTest < ActiveSupport::TestCase
set_fixture_class my_products: Product
fixtures :my_products
...
end
También es posible anular la columna que se debe usar como la clave principal de la tabla con
el ActiveRecord::Base.primary_key=método:
class Product < ApplicationRecord
self.primary_key = "product_id"
end
5 CRUD: Lectura y escritura de datos
CRUD es un acrónimo de los cuatro verbos que usamos para operar en los datos: C rete, R ead, Udate
y D elete. Active Record crea automáticamente métodos para permitir que una aplicación lea y manipule los datos
almacenados en sus tablas.
5.1 Crear
Los objetos de Active Record se pueden crear a partir de un hash, un bloque o tener sus atributos configurados
manualmente después de la creación. El newmétodo devolverá un nuevo objeto mientras createdevolverá el objeto y
lo guardará en la base de datos.
Por ejemplo, dado un modelo Usercon atributos de namey occupation, la createllamada al método creará y guardará
un nuevo registro en la base de datos:
user = User.create(name: "David", occupation: "Code
Artist")
Usando el newmétodo, un objeto puede ser instanciado sin guardarlo:
user = User.new
user.name = "David"
user.occupation = "Code Artist"
Una llamada a user.savecomprometerá el registro a la base de datos.
Por último, si se proporciona un bloque, tanto createy newse dió el nuevo objeto a ese bloque para la inicialización:
user = User.new do |u|
u.name = "David"
u.occupation = "Code Artist"
end
5.2 Leer
Active Record proporciona una API rica para acceder a datos dentro de una base de datos. A continuación hay algunos
ejemplos de diferentes métodos de acceso a datos proporcionados por Active Record.
# return a collection with all users
users = User.all
# return the first user
user = User.first
# return the first user named David
david = User.find_by(name: 'David')
# find all users named David who are Code Artists and
sort by created_at in reverse chronological order
users = User.where(name: 'David', occupation: 'Code
Artist').order(created_at: :desc)
Puede obtener más información sobre cómo consultar un modelo de registro activo en la guía de la interfaz de
búsqueda de registros activos .
5.3 Actualización
Una vez que se ha recuperado un objeto de Active Record, sus atributos pueden modificarse y guardarse en la base de
datos.
user = User.find_by(name: 'David')
user.name = 'Dave'
user.save
Una forma abreviada de esto es usar un nombre de atributo de asignación de hash para el valor deseado, de esta
manera:
user = User.find_by(name: 'David')
user.update(name: 'Dave')
Esto es más útil cuando se actualizan varios atributos a la vez. Si, por otro lado, desea actualizar varios registros a
granel, puede encontrar el update_allmétodo de clase útil:
User.update_all "max_login_attempts = 3,
must_change_password = 'true'"
5.4 Eliminar
Del mismo modo, una vez recuperado, un objeto de Active Record puede destruirse, lo que lo elimina de la base de
datos.
user = User.find_by(name: 'David')
user.destroy
Si desea eliminar varios registros a granel, puede usar el destroy_all método:
# find and delete all users named David
User.where(name: 'David').destroy_all

# delete all users


User.destroy_all
6 validaciones
Active Record le permite validar el estado de un modelo antes de que se escriba en la base de datos. Existen varios
métodos que puede usar para verificar sus modelos y validar que un valor de atributo no está vacío, es único y no está
ya en la base de datos, sigue un formato específico y muchos más.
La validación es un tema muy importante a tener en cuenta cuando se persiste en la base de datos, por lo que los
métodos savey se updatetienen en cuenta al ejecutar: regresan falsecuando la validación falla y no realizan ninguna
operación en la base de datos. Todos estos tienen una contraparte de explosión (es decir, save!y update!), que son
más estrictos en el sentido de que plantean la excepción ActiveRecord::RecordInvalidsi falla la validación. Un
ejemplo rápido para ilustrar:
class User < ApplicationRecord
validates :name, presence: true
end

user = User.new
user.save # => false
user.save! # => ActiveRecord::RecordInvalid:
Validation failed: Name can't be blank
Puede obtener más información sobre las validaciones en la guía Validación de registros activos .
7 devoluciones de llamada
Las devoluciones de llamadas de registro activo le permiten adjuntar código a ciertos eventos en el ciclo de vida de sus
modelos. Esto le permite agregar comportamiento a sus modelos al ejecutar código de forma transparente cuando
ocurren esos eventos, como cuando crea un nuevo registro, lo actualiza, lo destruye, etc. Puede obtener más
información sobre devoluciones de llamadas en la guía de Devolución de llamadas activas .
8 migraciones
Rails proporciona un lenguaje específico de dominio para administrar un esquema de base de datos llamado
migraciones. Las migraciones se almacenan en archivos que se ejecutan en cualquier base de datos compatible con
Active Record rake. Aquí hay una migración que crea una tabla:
class CreatePublications < ActiveRecord::Migration[5.0]
def change
create_table :publications do |t|
t.string :title
t.text :description
t.references :publication_type
t.integer :publisher_id
t.string :publisher_type
t.boolean :single_issue

t.timestamps
end
add_index :publications, :publication_type_id
end
end
Rails realiza un seguimiento de los archivos que se han comprometido con la base de datos y proporciona funciones de
reversión. Para crear realmente la tabla, la ejecutarías rails db:migratey la retrotraerías rails db:rollback,.
Tenga en cuenta que el código anterior es independiente de la base de datos: se ejecutará en MySQL, PostgreSQL,
Oracle y otros. Puede obtener más información acerca de las migraciones en la guía Migraciones de registros activos .
Realimentación
Le recomendamos que ayude a mejorar la calidad de esta guía.
Contribuye si ves errores tipográficos o de hechos. Para comenzar, puede leer nuestra sección de contribuciones de
documentación .
También puede encontrar contenido incompleto o cosas que no están actualizadas. Por favor, agregue cualquier
documentación faltante para el maestro. Asegúrese de verificar EdgeGuidesprimero para verificar si los problemas ya
están solucionados o no en la rama principal. Consulte las pautas de Ruby on Rails Guides para conocer el estilo y las
convenciones.
Si por algún motivo detecta algo que corregir pero no puede repararlo usted mismo, abra un problema .
Y por último, pero no menos importante, cualquier clase de discusión sobre la documentación de Ruby on Rails es muy
bienvenida en la lista de correo de rubyonrails-docs .

Potrebbero piacerti anche