Polymorphe Assoziationen mit aktivem Datensatz

Ruby on Rails ist ein außergewöhnlich produktives Webanwendungs-Framework, das für Programmiererfreude und nachhaltige Ergebnisse optimiert ist. Es bevorzugt Konventionen gegenüber Konfigurationen und ermöglicht es Ihnen daher, schönen Code zu schreiben, ohne sich zu viele Gedanken über die Konformation zu machen.

Es besteht eine steigende Nachfrage nach Ruby auf Schienen aufgrund seiner Geschwindigkeit und Agilität bei der Erstellung von Anwendungen mit verbesserter Produktivität und kürzerer Lieferzeit.

Active Record Associations sind eine der wichtigsten Funktionen von Rails. Zu diesen Assoziationen gehört auch die polymorphe Assoziation. Bei der polymorphen Assoziation kann ein Modell zu mehr als einem anderen Modell in einer einzigen Assoziation gehören.

Warum brauchen wir Assoziationen zwischen Modellen? Weil sie allgemeine Vorgänge in Ihrem Code einfacher und einfacher machen. Mit Active Record-Zuordnungen können wir diese und andere Vorgänge rationalisieren, indem wir Rails deklarativ mitteilen, dass eine Verbindung zwischen den beiden Modellen besteht.

In Rails, einem Verband ist eine Verbindung zwischen zwei Active Record-Modellen. Assoziationen werden mithilfe von Aufrufen im Makrostil implementiert, sodass Sie Ihren Modellen deklarativ Funktionen hinzufügen können. Indem Sie beispielsweise deklarieren, dass ein Modell zu einem anderen gehört, weisen Sie Rails an, Primärschlüssel-Fremdschlüssel-Informationen zwischen Instanzen der beiden Modelle zu verwalten, und Sie erhalten außerdem eine Reihe von Hilfsmethoden, die Ihrem Modell hinzugefügt werden. Rails unterstützt sechs Arten von Assoziationen:

Mal sehen, wie man es umsetzt. Zuerst müssen wir ein Dokumentmodell erstellen.

Schienen-G-Modell Dokumentname:string wpl_article_id:integer

wpl_article_type:string

Klasse Document < ActiveRecord::Base

gehört_zu :wpl_article, :polymorphic => true

Ende

Die Schnittstelle:

Bei Verwendung einer polymorphen Assoziation müssen wir nur ein einziges „gehört_to“ definieren und ein Paar verwandter Spalten zur zugrunde liegenden Datenbanktabelle hinzufügen. Von diesem Moment an können an jede Klasse in unserem System Dokumente angehängt werden (was sie zu „wpl_article“ machen würde), ohne dass das Datenbankschema oder das Dokumentmodell selbst geändert werden muss.

In unserer Anwendung gibt es keine wpl_article-Klasse (oder kein wpl_article-Modul). Wir haben die Assoziation :wpl_article genannt, weil sie die Schnittstelle von Objekten, die auf diese Weise verknüpft werden, genau beschreibt. Der Name

:wpl_article wird auf der anderen Seite der Assoziation wieder auftauchen:

Klasse Software < ActiveRecord::Base

has_one :document, :as => :wpl_article

Ende

Klasse Hardware < ActiveRecord::Base

has_one :document, :as => :wpl_article

Ende

Klasse Research < ActiveRecord::Base

has_one :document, :as => :wpl_article

Ende

Die Datenbankspalten: (association_name)_type – Speichert den Typ für

polymorphe Assoziationen.

Klasse CreateDocuments < ActiveRecord::Migration

auf jeden Fall ändern

create_table :documents do |t|

t.string :name

t.integer :wpl_article_id # wie bereits erwähnt „belongs_to

:wpl_article, :polymorphic => true“ im Dokumentmodell. Das ist ein

Konvention des Schemas, dass Verbandsname_Typ und

Verbandsname_ID lautet dementsprechend „wpl_article“.

t.string :wpl_article_type

Ende

Ende

Ende

Software, Hardware und Forschung haben ein Dokument über die polymorphe Assoziation wpl_article Hier können wir sehen, wie das Modell funktioniert. Das Dokument ist über wpl_article mit den drei Modellen Software, Hardware und Forschung in einer einzigen Verknüpfung verknüpft, was beim Erreichen der Verknüpfung hilft.

Entwicklungsumgebung wird geladen (Rails 4.1.1)

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

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

„Weltcup“>

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

=> #

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

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

Name: „Worldcup“>

=> wahr

2.0.0-p247 :004 > Software.last.document.name

=> „Weltcup“

2.0.0-p247 :005 >Dokument.last

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

„Weltcup“>

2.0.0-p247 :006 >Document.last.wpl_article

Es ruft den Recoed basierend auf wpl_article_id und wpl_article_type ab

Railscarma bietet End-to-End-Ruby-on-Rails-Lösungen für die Entwicklung, Bereitstellung, Verwaltung, Überwachung und Unterstützung Ihrer Apps.

RailsCarma arbeitet von Anfang an an der Anwendung von Ruby und bietet Ihnen den Vorteil seiner bahnbrechenden Expertise, um Ihnen dabei zu helfen, schnelle und vereinfachte Geschäftslösungen zu erhalten.

Mehr lesen : 

Nehmen Sie Kontakt mit uns auf.

Abonnieren Sie die neuesten Updates

zusammenhängende Posts

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEGerman