Polymorfa associationer med aktiva rekord

Ruby on Rails är ett exceptionellt produktivt ramverk för webbapplikationer och är optimerat för programmerarglädje och hållbar produktion. Det gynnar konvention framför konfiguration och låter dig därför skriva vacker kod utan att oroa dig för mycket om konformationen.

Det finns en ökande efterfrågan på Ruby on Rails på grund av dess snabbhet och smidighet i att bygga applikationer med förbättrad produktivitet och minskad leveranstid.

Active Record Associations är en av Rails viktigaste funktioner. Polymorf association är en del av dessa associationer. Med polymorf association kan en modell tillhöra mer än en annan modell, på en enda association.

Varför behöver vi associationer mellan modeller? Eftersom de gör vanliga operationer enklare och enklare i din kod. Med Active Record-föreningar kan vi effektivisera dessa – och andra – verksamheter genom att deklarativt tala om för Rails att det finns ett samband mellan de två modellerna.

I Rails, en förening är en koppling mellan två Active Record-modeller. Associationer implementeras med anrop i makrostil, så att du deklarativt kan lägga till funktioner i dina modeller. Till exempel, genom att deklarera att en modell tillhör en annan, instruerar du Rails att underhålla information om primärnyckel-utländsk nyckel mellan instanser av de två modellerna, och du får också ett antal verktygsmetoder lagt till din modell. Rails stöder sex typer av föreningar:

Låt oss se hur man implementerar det. Först måste vi skapa en dokumentmodell.

rails g-modell Dokumentnamn:sträng wpl_article_id:integer

wpl_artikeltyp:sträng

klass Dokument < ActiveRecord::Base

tillhör_till :wpl_article, :polymorphic => sant

slutet

Gränssnittet:

Med hjälp av en polymorf association behöver vi bara definiera en enda tillhör_till och lägga till ett par relaterade kolumner till den underliggande databastabellen. Från och med det ögonblicket kan vilken klass som helst i vårt system ha dokument kopplade till sig (vilket skulle göra det till wpl_article) utan att behöva ändra databasschemat eller själva dokumentmodellen.

Det finns ingen wpl_article-klass (eller modul) i vår applikation. Vi döpte associationen till :wpl_article eftersom den exakt beskriver gränssnittet för objekt som kommer att associeras på detta sätt. Namnet

:wpl_article kommer att dyka upp igen på andra sidan av föreningen:

klass Programvara < ActiveRecord::Base

has_one :document, :as => :wpl_article

slutet

klass Hårdvara < ActiveRecord::Base

has_one :document, :as => :wpl_article

slutet

klass Forskning < ActiveRecord::Base

has_one :document, :as => :wpl_article

slutet

Databaskolumnerna: (association_name)_type – Lagrar typen för

polymorfa associationer.

klass CreateDocuments < ActiveRecord::Migration

def förändring

skapa_tabell :dokument gör |t|

t.string :namn

t.integer :wpl_article_id # som vi har nämnt “belongs_to

:wpl_article, :polymorphic => true” i dokumentmodellen. Det här är en

konvention för schema som association_name_type och

association_name_id kommer därför att vara "wpl_article".

t.string :wpl_article_type

slutet

slutet

slutet

Software, Hardware and Research har ett dokument via polymorphic association wpl_article Här kan vi se hur modellen. Dokument är associerat med tre modeller av programvara, hårdvara och forskning i en förening via wpl_article som hjälper till att uppnå föreningen.

Laddar utvecklingsmiljö (Rails 4.1.1)

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

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

"VM">

2.0.0-p247 :002 > programvara = Software.create(namn: 'cricinfo.com')

=> #

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

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

namn: "Worldcup">

=> sant

2.0.0-p247 :004 > Programvara.last.dokument.namn

=> "VM"

2.0.0-p247 :005 >Dokument.sist

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

"VM">

2.0.0-p247 :006 >Document.last.wpl_article

det kommer att hämta det omkodade baserat på wpl_article_id och wpl_article_type

Railscarma tillhandahåller end-to-end Ruby on Rails-lösningar från utveckling, distribution, hantering, övervakning och support av dina appar.

Genom att arbeta på Rubys applikation från dess begynnande stadier ger RailsCarma dig fördelen av sin banbrytande expertis för att hjälpa dig att få snabba och förenklade affärslösningar.

Läs mer : 

Kontakta oss.

Prenumerera för de senaste uppdateringarna

relaterade inlägg

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

sv_SESwedish