Ruby on Rails - Registros activos
Rails Active Record es la capa Object / Relational Mapping (ORM) suministrada con Rails. Sigue de cerca el modelo ORM estándar, que es el siguiente:
- las tablas se asignan a las clases,
- las filas se asignan a objetos y
- las columnas se asignan a los atributos del objeto.
Rails Active Records proporciona una interfaz y enlace entre las tablas en una base de datos relacional y el código del programa Ruby que manipula los registros de la base de datos. Los nombres de los métodos Ruby se generan automáticamente a partir de los nombres de campo de las tablas de la base de datos.
Cada objeto de registro activo tiene CRUD (Creatar Read, Update, y Delete) métodos para el acceso a la base de datos. Esta estrategia permite diseños simples y asignaciones directas entre tablas de base de datos y objetos de aplicación.
Traducir un modelo de dominio a SQL
Traducir un modelo de dominio a SQL es generalmente sencillo, siempre que recuerde que debe escribir SQL compatible con Rails. En términos prácticos, debes seguir ciertas reglas:
Cada entidad (como un libro) obtiene una tabla en la base de datos con su nombre, pero en plural (libros).
Cada tabla de coincidencia de entidades tiene un campo llamado id , que contiene un número entero único para cada registro insertado en la tabla.
Dada la entidad xy la entidad y, si la entidad y pertenece a la entidad x, entonces la tabla y tiene un campo llamado x_id.
La mayor parte de los campos de cualquier tabla almacena los valores de las propiedades simples de esa entidad (cualquier cosa que sea un número o una cadena).
Creación de archivos de registro activos (modelos)
Para crear los archivos Active Record para nuestras entidades para la aplicación de la biblioteca, presentado en el capítulo anterior, emita el siguiente comando desde el nivel superior del directorio de la aplicación.
library\> rails script/generate model Book
library\> rails script/generate model Subject
Encima rails generate model book Los comandos generan el código automático de la siguiente manera:
Le está diciendo al generador que cree modelos llamados Libro y Asunto para almacenar instancias de libros y temas. Observe que está escribiendo Libro y Asunto en mayúsculas y usando la forma singular. Este es un paradigma de Rails que debe seguir cada vez que cree un modelo.
Cuando utiliza la herramienta de generación, Rails crea el archivo de modelo real que contiene todos los métodos exclusivos del modelo y las reglas de negocio que define, un archivo de prueba unitaria para realizar el desarrollo basado en pruebas, un archivo de datos de muestra (llamado accesorios) para usar con las pruebas unitarias y una migración de Rails que facilita la creación de tablas y columnas de bases de datos.
Además de crear muchos otros archivos y directorios, esto creará archivos llamados book.rb y subject.rb que contiene una definición de esqueleto en el app/models directorio.
Contenido disponible en book.rb -
class Book < ActiveRecord::Base
end
Contenido disponible en subject.rb -
class Subject < ActiveRecord::Base
end
Crear asociaciones entre modelos
Cuando tenga más de un modelo en su aplicación de rieles, deberá crear una conexión entre esos modelos. Puede hacerlo a través de asociaciones. Active Record admite tres tipos de asociaciones:
one-to-one- Existe una relación uno a uno cuando un elemento tiene exactamente uno de otro elemento. Por ejemplo, una persona tiene exactamente un cumpleaños o un perro tiene exactamente un dueño.
one-to-many- Existe una relación de uno a varios cuando un solo objeto puede ser miembro de muchos otros objetos. Por ejemplo, un tema puede tener muchos libros.
many-to-many - Existe una relación de muchos a muchos cuando el primer objeto está relacionado con uno o más de un segundo objeto, y el segundo objeto está relacionado con uno o varios del primer objeto.
Indique estas asociaciones agregando declaraciones a sus modelos: has_one, has_many, attends_to y has_and_belongs_to_many.
Ahora, debe indicarle a Rails qué relaciones desea establecer dentro del sistema de datos de la biblioteca. Para hacerlo, modifique book.rb y subject.rb para que se vean así:
class Book < ActiveRecord::Base
belongs_to :subject
end
Hemos utilizado un tema singular en el ejemplo anterior, porque un Libro puede pertenecer a un solo Asunto.
class Subject < ActiveRecord::Base
has_many :books
end
Hemos utilizado libros en plural aquí, porque un tema puede tener varios libros.
Implementación de validaciones en modelos
La implementación de validaciones se realiza en un modelo Rails. Los datos que ingresa en la base de datos se definen en el modelo de Rails real, por lo que solo tiene sentido definir qué datos válidos implican en la misma ubicación.
Las validaciones son:
- El valor del campo de título no debe ser NULL.
- El valor del campo de precio debe ser numérico.
Abierto book.rb en el app\model subdirectorio y coloque las siguientes validaciones:
class Book < ActiveRecord::Base
belongs_to :subject
validates_presence_of :title
validates_numericality_of :price, :message=>"Error Message"
end
validates_presence_of - protege los campos "NOT NULL" contra la falta de entrada del usuario.
validates_numericality_of - Evita que el usuario ingrese datos no numéricos.
Además de las validaciones mencionadas anteriormente, existen otras validaciones comunes. Consulte la Guía rápida de rieles .
¿Lo que sigue?
En el próximo capítulo, aprenderemos Rails Migration, que le permite usar Ruby para definir cambios en el esquema de su base de datos, haciendo posible usar un sistema de control de versiones para mantener las cosas sincronizadas con el código real.