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 :
- Förstå Asset Pipeline Plugin
- Grunderna för att skapa och använda moduler i Rails
- Ett enkelt sätt att öka prestandan för din Rails-app
- Skala applikationer med flera databasanslutning