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 :
- Grundlegendes zum Asset-Pipeline-Plugin
- Die Grundlagen zum Erstellen und Verwenden von Modulen in Rails
- Eine einfache Möglichkeit, die Leistung Ihrer Rails-App zu steigern
- Skalieren von Anwendungen mit mehreren Datenbankverbindungen