Associations polymorphes avec enregistrement actif

Cadre d'application Web exceptionnellement productif, Ruby on Rails est optimisé pour le plaisir des programmeurs et un résultat durable. Il privilégie la convention à la configuration et vous permet ainsi d'écrire du beau code sans trop vous soucier de la conformation.

Il existe une demande croissante pour Rubis sur Rails en raison de sa rapidité et de son agilité dans la création d'applications avec une productivité améliorée et des délais de livraison réduits.

Les associations d'enregistrements actifs sont l'une des fonctionnalités les plus importantes de Rails. L'association polymorphe fait partie de ces associations. Avec l'association polymorphe, un modèle peut appartenir à plusieurs autres modèles, sur une seule association.

Pourquoi avons-nous besoin d’associations entre modèles ? Parce qu'ils rendent les opérations courantes plus simples et plus faciles dans votre code. Avec les associations Active Record, nous pouvons rationaliser ces opérations – et d’autres – en indiquant de manière déclarative à Rails qu’il existe une connexion entre les deux modèles.

Dans Rails, un association est une connexion entre deux modèles Active Record. Les associations sont implémentées à l'aide d'appels de style macro, afin que vous puissiez ajouter des fonctionnalités de manière déclarative à vos modèles. Par exemple, en déclarant qu'un modèle appartient à un autre, vous demandez à Rails de conserver les informations de clé primaire et de clé étrangère entre les instances des deux modèles, et vous obtenez également un certain nombre de méthodes utilitaires ajoutées à votre modèle. Rails prend en charge six types d'associations :

Voyons comment le mettre en œuvre. Nous devrons d’abord créer un modèle de document.

modèle Rails G Nom du document : chaîne wpl_article_id : entier

wpl_article_type: chaîne

Document de classe < ActiveRecord :: Base

appartient_to :wpl_article, :polymorphic => true

fin

L'interface:

En utilisant une association polymorphe, nous devons définir un seul groupe d'appartenances_to et ajouter une paire de colonnes associées à la table de base de données sous-jacente. À partir de ce moment, n'importe quelle classe de notre système peut avoir des documents attachés (ce qui en ferait wpl_article) sans avoir besoin de modifier le schéma de la base de données ou le modèle de document lui-même.

Il n'y a pas de classe (ou module) wpl_article dans notre application. Nous avons nommé l'association :wpl_article car elle décrit précisément l'interface des objets qui seront ainsi associés. Le nom

:wpl_article réapparaîtra de l'autre côté de l'association :

logiciel de classe < ActiveRecord :: Base

has_one :document, :as => :wpl_article

fin

classe Matériel < ActiveRecord :: Base

has_one :document, :as => :wpl_article

fin

recherche de classe < ActiveRecord :: Base

has_one :document, :as => :wpl_article

fin

Les colonnes de la base de données : (association_name)_type – Stocke le type pour

associations polymorphes.

classe CreateDocuments < ActiveRecord :: Migration

changement définitif

create_table :les documents font |t|

t.string : nom

t.integer :wpl_article_id # comme nous l'avons mentionné « appartient_à

:wpl_article, :polymorphic => true” dans le modèle de document. C'est un

convention du schéma selon laquelle association_name_type et

association_name_id sera donc « wpl_article ».

t.string :wpl_article_type

fin

fin

fin

Les logiciels, le matériel et la recherche ont un document via une association polymorphe wpl_article Ici, nous pouvons voir comment modèle. Le document est associé à trois modèles de logiciels, de matériel et de recherche en association unique via wpl_article qui aide à réaliser l'association.

Chargement de l'environnement de développement (Rails 4.1.1)

2.0.0-p247 :001 > document = Document.create(nom : 'Worldcup)

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

«Coupe du monde»>

2.0.0-p247 :002 > logiciel = Software.create(nom : 'cricinfo.com')

=> #

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

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

nom : « Coupe du Monde »>

=> vrai

2.0.0-p247 :004 > Logiciel.dernier.document.nom

=> « Coupe du Monde »

2.0.0-p247 :005 >Document.dernier

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

«Coupe du monde»>

2.0.0-p247 :006 >Document.last.wpl_article

il récupérera le reçu en fonction de wpl_article_id et wpl_article_type

Railscarma fournit des solutions Ruby on Rails de bout en bout depuis le développement, le déploiement, la gestion, la surveillance et la prise en charge de vos applications.

Travaillant sur l'application Ruby dès ses débuts, RailsCarma vous fait bénéficier de son expertise pionnière pour vous aider à obtenir des solutions métiers rapides et simplifiées.

En savoir plus : 

Prenez contact avec nous.

Abonnez-vous pour les dernières mises à jour

Articles Similaires

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

fr_FRFrench