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 :
- Comprensión del complemento de canalización de activos
- Los conceptos básicos de la creación y el uso de módulos en Rails
- Una forma sencilla de aumentar el rendimiento de su aplicación Rails
- Ampliación de aplicaciones con conexión de múltiples bases de datos