Ruby on Railsda modellarning merosxo'rligi yoki polimorfik aloqalarni qanday amalga oshirish mumkin?
sobes.tech AI
AIdan javob
Ruby on Rails'da modellarning merosxo'rligi Single Table Inheritance (STI) yoki polimorfik aloqalar orqali amalga oshiriladi.
Single Table Inheritance (STI)
STI turli ob'ekt turlari o'xshash atributlarga ega, ammo turli xulq-atvorlarga ega bo'lsa, mos keladi. Barcha ma'lumotlar bitta jadvalda saqlanadi va ob'ekt turi type ustuni orqali aniqlanadi.
-
Jadval va
typeustunini yaratish:# migration create_table :animals do |t| t.string :name t.string :type t.timestamps end -
Asosiy klassdan meros olgan modellarning yaratilishi:
# app/models/animal.rb class Animal < ApplicationRecord # Umumiy logika end # app/models/dog.rb class Dog < Animal # Itlar uchun maxsus logika def bark "Woof!" end end # app/models/cat.rb class Cat < Animal # Mushuklar uchun maxsus logika def meow "Meow!" end end -
Foydalanish:
# konsol dog = Dog.create(name: "Buddy") cat = Cat.create(name: "Whiskers") animal = Animal.find(dog.id) # Dog ob'ekti qaytaradi
Polimorfik aloqalar
Polimorfik aloqalar, model turli xil boshqa modellarga tegishli bo'lishi mumkin bo'lsa, ishlatiladi.
-
Aloqador modelda
_idva_typeustunlarini qo'shish: Masalan,CommentArticleyokiPhotoga tegishli bo'lishi mumkin:# migration create_table :comments do |t| t.text :body t.references :commentable, polymorphic: true, null: false t.timestamps end -
Modellarda aloqani e'lon qilish:
Commentmodelida:# app/models/comment.rb class Comment < ApplicationRecord belongs_to :commentable, polymorphic: true endArticlevaPhotomodellarda:# 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 -
Foydalanish:
# konsol article = Article.create(title: "Rails Maslahatlari") photo = Photo.create(caption: "Go'zal quyosh botishi") article.comments.create(body: "Ajoyib maqola!") photo.comments.create(body: "Chiroyli foto!") Comment.first.commentable # Article qaytaradi Comment.last.commentable # Photo qaytaradi
STI va polimorfik aloqalar orasidagi tanlov, ma'lumotlar tuzilmasi va modellarning o'rtasidagi munosabatlarga bog'liq. STI "bir-ani" munosabatlar uchun (Dog bir Animal), polimorfik aloqalar esa "bor" munosabatlar uchun (Article bor Comment, Photo bor Comment, Comment tegishli bo'lishi mumkin Article yoki Photo).