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.
Why do we need associations between models? Because they make common operations simpler and easier in your code. With Active Record associations, we can streamline these – and other – operations by declaratively telling Rails that there is a connection between the two models.
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.
There isn’t a wpl_article class (or module) in our application. We named the association :wpl_article because it accurately describes the interface of objects that will be associated in this way. The 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
The Database Columns: (association_name)_type – Stores the type for
polymorphe Assoziationen.
Klasse CreateDocuments < ActiveRecord::Migration
auf jeden Fall ändern
create_table :documents do |t|
t.string :name
t.integer :wpl_article_id # as we have mentioned “belongs_to
:wpl_article, :polymorphic => true” in document model . This is a
Konvention des Schemas, dass Verbandsname_Typ und
association_name_id will be accordingly “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:
“Worldcup”>
2.0.0-p247 :002 > software = Software.create(name: ‘cricinfo.com’)
=> #<Software id: 1, 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
=> “Worldcup”
2.0.0-p247 :005 >Dokument.last
=> # <Document id: 1, wpl_article_type: nil, wpl_article_id: nil, name:
“Worldcup”>
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