Active Record - moiseserg/rubyWebDev GitHub Wiki
Active Record Active Record 3(https://github.com/moiseserg/rubyWebDev/wiki/Referencias) es un patrón arquitectónico que permite almacenar datos en bases de datos relacionales de manera persistentes a través de un modelo. La interfaz de un objeto conforme a este patrón incluye operaciones para insertar, actualizar y remover datos de una tabla dentro de la base de datos.
Cuando se crea una instancia de la clase (create), se agrega un registro a la tabla, de esta forma cada instancia es asociada a un registro dentro de la tabla. Si se actualiza una instancia del objeto, el registro correspondiente en la tabla también es actualizado. La clase implementa métodos para acceder por filas o por columnas, a las propiedades de la tabla, el listado de todos los elementos de la tabla, entre otros.
Ejemplos
Como ejemplos, para una clase Pet (Mascota) se usa el método all para listar todas las instancias de Pet almacenados en la tabla:
Pet.all
Implementa en SQL:
SELECT "pets".* FROM "pets"
El método first obtiene el primer elemento de la tabla Pets.
Pet.first
Implementa en SQL:
SELECT "pets".* FROM "pets" ORDER BY "pets"."id" ASC LIMIT 1
Por ejemplo para el modelo de una persona (Person), los atributos pueden ser listados con el método attribute_names:
Person.attribute_names
=> ["id", "nombre", "created_at", "updated_at"]
Se puede crear una nueva persona e insertarla a la tabla People de la siguiente manera:
Person.create(nombre: 'Juan')
Al ser ejecutada la instrucción internamente se ejecuta una instrucción INSERT que genera la siguiente salida:
(0.1ms) begin transaction
SQL (0.4ms) INSERT INTO "people" ("created_at", "nombre", "updated_at") VALUES (?, ?, ?) ["created_at", Tue, 04 Feb 2014 09:10:54 UTC +00:00], ["nombre", "Juan"], ["updated_at", Tue, 04 Feb 2014 09:10:54 UTC +00:00](/moiseserg/rubyWebDev/wiki/"created_at",-Tue,-04-Feb-2014-09:10:54-UTC-+00:00],-["nombre",-"Juan"],-["updated_at",-Tue,-04-Feb-2014-09:10:54-UTC-+00:00)
(151.3ms) commit transaction
=> #<Person id: 1, nombre: "Juan", created_at: "2014-02-04 09:10:54", updated_at: "2014-02-04 09:10:54">
Active Record permite mantener la persistencia del Modelo Entidad-Relación, para ello, si una persona tiene una mascota o más, existe por lo tanto una relación una (Persona) a muchas (mascotas). Si se tiene previamente creada una persona de nombre 'Juan' en la base de datos, es posible localizarlo y asignarlo a una variable temporal usando:
alguien = Person.find_by_nombre('Juan')
que internamente implementa:
Person Load (0.3ms) SELECT "people".* FROM "people" WHERE "people"."nombre" = 'Juan' LIMIT 1
=> #<Person id: 1, nombre: "Juan", created_at: "2014-02-04 09:10:54", updated_at: "2014-02-04 09:10:54">