Kā īstenot modeļu mantošanu vai polimorfās asociācijas Ruby on Rails?
sobes.tech AI
Atbilde no AI
Ruby on Rails modeļu mantošana tiek īstenota, izmantojot Single Table Inheritance (STI) vai ar polimorfiskām asociācijām.
Single Table Inheritance (STI)
STI ir piemērots, kad dažādu tipu objektiem ir līdzīgi atribūti, bet atšķirīga uzvedība. Visi dati tiek glabāti vienā tabulā, un objekta tips tiek noteikts pēc kolonnas type.
-
Tabulas un
typekolonnas izveide:# migrācija create_table :animals do |t| t.string :name t.string :type t.timestamps end -
Galvenā un mantojošo modeļu izveide:
# app/models/animal.rb class Animal < ApplicationRecord # Vispārīga loģika visiem dzīvniekiem end # app/models/dog.rb class Dog < Animal # Īpaša loģika suņiem def bark "Woof!" end end # app/models/cat.rb class Cat < Animal # Īpaša loģika kaķiem def meow "Meow!" end end -
Lietošanas piemērs:
# konsolē dog = Dog.create(name: "Buddy") cat = Cat.create(name: "Whiskers") animal = Animal.find(dog.id) # Atgriež Dog objektu
Polimorfiskas asociācijas
Polimorfiskas asociācijas tiek izmantotas, kad modelis var piederēt dažādiem citiem modeļiem.
-
Pievienot
_idun_typekolonnas saistītajam modelim: Piemēram, jaCommentvar piederētArticlevaiPhoto:# migrācija create_table :comments do |t| t.text :body t.references :commentable, polymorphic: true, null: false t.timestamps end -
Apsaimniekošanas deklarācija modeļos:
Commentmodelī:# app/models/comment.rb class Comment < ApplicationRecord belongs_to :commentable, polymorphic: true endArticleunPhotomodeļos:# app/models/article.rb class Article < ApplicationRecord has_many :comments, as: :commentable end # app/models/photo.rb class Photo < ApplicationRecord has_many :comments, as: :commentable end -
Lietošanas piemērs:
# konsolē article = Article.create(title: "Rails Tips") photo = Photo.create(caption: "Beautiful Sunset") article.comments.create(body: "Great article!") photo.comments.create(body: "Lovely photo!") Comment.first.commentable # Atgriež Article Comment.last.commentable # Atgriež Photo
Izvēle starp STI un polimorfiskajām asociācijām ir atkarīga no datu struktūras un modeļu attiecībām. STI ir piemērots "is-a" attiecībām (Dog ir Animal), bet polimorfiskas asociācijas — "has-a" attiecībām (Article ir Comment, Photo ir Comment, kur Comment var piederēt Article vai Photo).