Asociaciones polimórficas con registro activo

Ruby on Rails, un marco de aplicación web excepcionalmente productivo, está optimizado para el deleite del programador y una producción sostenible. Favorece la convención sobre la configuración y, por lo tanto, le permite escribir código atractivo sin preocuparse demasiado por la conformación.

Hay una demanda creciente de Ruby on Rails debido a su velocidad y agilidad en la creación de aplicaciones con productividad mejorada y tiempo de entrega reducido.

Las asociaciones de registros activos son una de las características más importantes de Rails. La asociación polimórfica es parte de estas asociaciones. Con la asociación polimórfica, un modelo puede pertenecer a más de un modelo, en una sola asociación.

¿Por qué necesitamos asociaciones entre modelos? Porque simplifican y facilitan las operaciones comunes en su código. Con las asociaciones de Active Record, podemos optimizar estas (y otras) operaciones diciéndole a Rails de forma declarativa que existe una conexión entre los dos modelos.

En Rails, un asociación es una conexión entre dos modelos Active Record. Las asociaciones se implementan mediante llamadas de estilo macro, de modo que pueda agregar funciones a sus modelos de forma declarativa. Por ejemplo, al declarar que un modelo pertenece a otro, le indica a Rails que mantenga la información de clave primaria y clave externa entre instancias de los dos modelos, y también obtiene una serie de métodos de utilidad agregados a su modelo. Rails admite seis tipos de asociaciones:

Veamos cómo implementarlo. Primero necesitaremos crear un modelo de documento.

modelo Rails g Nombre del documento: cadena wpl_article_id: entero

wpl_article_type:cadena

clase Documento < ActiveRecord::Base

pertenece_a :wpl_article, :polymorphic => verdadero

fin

La interfaz:

Usando una asociación polimórfica, necesitamos definir solo un pertenece_a y agregar un par de columnas relacionadas a la tabla de la base de datos subyacente. A partir de ese momento, cualquier clase de nuestro sistema puede tener documentos adjuntos (lo que la convertiría en wpl_article) sin necesidad de alterar el esquema de la base de datos ni el propio modelo de documento.

No hay una clase (o módulo) wpl_article en nuestra aplicación. Llamamos a la asociación :wpl_article porque describe con precisión la interfaz de los objetos que se asociarán de esta manera. El nombre

:wpl_article aparecerá nuevamente en el otro lado de la asociación:

clase Software < ActiveRecord::Base

has_one :documento, :as => :wpl_article

fin

clase Hardware < ActiveRecord::Base

has_one :documento, :as => :wpl_article

fin

clase Investigación < ActiveRecord::Base

has_one :documento, :as => :wpl_article

fin

Las columnas de la base de datos: (nombre_asociación)_tipo: almacena el tipo de

asociaciones polimorfas.

clase CreateDocuments < ActiveRecord::Migración

definitivamente cambio

create_table :los documentos no |t|

t.cadena: nombre

t.integer :wpl_article_id # como hemos mencionado “belongs_to

:wpl_article, :polymorphic => true” en el modelo de documento. Esto es un

convención de esquema que asociacion_nombre_tipo y

Association_name_id será, en consecuencia, "wpl_article".

t.cadena: wpl_article_type

fin

fin

fin

Software, Hardware e Investigación tienen un documento a través de una asociación polimórfica wpl_article Aquí podemos ver cómo se modela. El documento está asociado con tres modelos de software, hardware e investigación en una sola asociación a través de wpl_article, lo que ayuda a lograr la asociación.

Cargando entorno de desarrollo (Rails 4.1.1)

2.0.0-p247: 001 > documento = Documento.create (nombre: 'Copa Mundial)

=> # <Document id: 1, wpl_article_type: nil, wpl_article_id: nil, name:

“Copa del Mundo”>

2.0.0-p247: 002 > software = Software.create(nombre: 'cricinfo.com')

=> #

2.0.0-p247: 003 > document.update_attribute(:wpl_article, software)

=> # <Document id: 1, wpl_article_type: ‘Software’, wpl_article_id: 1,

nombre: “Copa Mundial”>

=> verdadero

2.0.0-p247 :004 > Software.apellido.nombre.del.documento

=> “Copa del mundo”

2.0.0-p247 :005 >Documento.último

=> # <Document id: 1, wpl_article_type: nil, wpl_article_id: nil, name:

“Copa del Mundo”>

2.0.0-p247 :006 >Documento.último.wpl_artículo

recuperará la recuperación según wpl_article_id y wpl_article_type

Railscarma proporciona soluciones Ruby on Rails de extremo a extremo desde el desarrollo, implementación, administración, monitoreo y soporte de sus aplicaciones.

Al trabajar en la aplicación Ruby desde sus etapas iniciales, RailsCarma le brinda la ventaja de su experiencia pionera para ayudarlo a obtener soluciones comerciales rápidas y simplificadas.

Leer más : 

Póngase en contacto con nosotros.

Suscríbete para recibir las últimas actualizaciones

Artículos Relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

es_ESSpanish