Ruby on Rails-də modellərin irsiyyəti və ya çoxformal əlaqələri necə həyata keçirmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Ruby on Rails-də modellərin irsiyyəti Single Table Inheritance (STI) və ya polimorfik əlaqələr vasitəsilə həyata keçirilir.
Single Table Inheritance (STI)
STI müxtəlif obyekt tiplərinin oxşar atributlara malik olduğu, lakin fərqli davranışlara sahib olduğu hallarda uyğundur. Bütün məlumatlar tək bir cədvəldə saxlanılır və obyekt tipi type sütunu ilə müəyyən edilir.
-
Cədvəl və
typesütununun yaradılması:# migration create_table :animals do |t| t.string :name t.string :type t.timestamps end -
Əsas sinifdən irsi olan modellərin yaradılması:
# app/models/animal.rb class Animal < ApplicationRecord # Ümumi məntiq end # app/models/dog.rb class Dog < Animal # İti üçün xüsusi məntiq def bark "Woof!" end end # app/models/cat.rb class Cat < Animal # Pişik üçün xüsusi məntiq def meow "Meow!" end end -
İstifadə:
# konsol dog = Dog.create(name: "Buddy") cat = Cat.create(name: "Whiskers") animal = Animal.find(dog.id) # Dog obyektini qaytarır
Polimorfik əlaqələr
Polimorfik əlaqələr, bir modelin fərqli digər modellərə aid ola biləcəyi hallarda istifadə olunur.
-
Əlaqəli modeldə
_idvə_typesütunlarının əlavə olunması: Məsələn,CommentArticlevə yaPhoto-ya aid ola bilər:# migration create_table :comments do |t| t.text :body t.references :commentable, polymorphic: true, null: false t.timestamps end -
Modellərdə əlaqənin elan olunması:
Commentmodelində:# app/models/comment.rb class Comment < ApplicationRecord belongs_to :commentable, polymorphic: true endArticlevəPhotomodellərində:# 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 -
İstifadə:
# konsol article = Article.create(title: "Rails Məsləhətləri") photo = Photo.create(caption: "Gözəl Gün Batımı") article.comments.create(body: "Əla məqalə!") photo.comments.create(body: "Gözəl foto!") Comment.first.commentable # Article qaytarır Comment.last.commentable # Photo qaytarır
STI və polimorfik əlaqələr arasındakı seçim, məlumatların strukturu və modellər arasındakı münasibətlərdən asılıdır. STI "bir-şeydir" münasibətləri üçün (Dog bir Animal), polimorfik əlaqələr isə "sahibdir" münasibətləri üçün (Article sahibdir Comment, Photo sahibdir Comment, burada Comment aid edir Article və ya Photo-ya).