Ruby on Rails'ta modellerin kalıtımını veya polimorfik ilişkileri nasıl uygularsınız?
sobes.tech yapay zeka
AI'dan gelen yanıt
Ruby on Rails'ta modellerin kalıtımı, Single Table Inheritance (STI) veya polimorfik ilişkiler aracılığıyla gerçekleştirilir.
Single Table Inheritance (STI)
STI, farklı nesne türlerinin benzer özelliklere sahip olduğu ancak farklı davranışlar sergilediği durumlar için uygundur. Tüm veriler tek bir tabloda saklanır ve nesne tipi type sütunu ile belirlenir.
-
Tablo ve
typesütununun oluşturulması:# migration create_table :animals do |t| t.string :name t.string :type t.timestamps end -
Temel sınıftan türeyen model sınıflarının oluşturulması:
# app/models/animal.rb class Animal < ApplicationRecord # Tüm hayvanlar için ortak mantık end # app/models/dog.rb class Dog < Animal # Köpekler için özgü mantık def bark "Woof!" end end # app/models/cat.rb class Cat < Animal # Kediler için özgü mantık def meow "Meow!" end end -
Kullanım:
# konsol dog = Dog.create(name: "Buddy") cat = Cat.create(name: "Whiskers") animal = Animal.find(dog.id) # Bir Dog nesnesi döner
Polimorfik ilişkiler
Polimorfik ilişkiler, bir modelin farklı diğer modellere ait olabileceği durumlar için kullanılır.
-
İlişkili modelde
_idve_typesütunlarının eklenmesi: Örneğin,CommentmodeliArticleveyaPhoto'ya ait olabilir:# migration create_table :comments do |t| t.text :body t.references :commentable, polymorphic: true, null: false t.timestamps end -
Modellerde ilişki bildirimleri:
Commentmodelinde:# app/models/comment.rb class Comment < ApplicationRecord belongs_to :commentable, polymorphic: true endArticlevePhotomodellerinde:# 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 -
Kullanım:
# konsol article = Article.create(title: "Rails İpuçları") photo = Photo.create(caption: "Güzel Gün Batımı") article.comments.create(body: "Harika makale!") photo.comments.create(body: "Güzel fotoğraf!") Comment.first.commentable # Article döner Comment.last.commentable # Photo döner
STI ve polimorfik ilişkiler arasındaki seçim, veri yapısına ve modeller arasındaki ilişkilere bağlıdır. STI, "bir-şey-ise" ilişkileri (Dog bir Animal'dır) için, polimorfik ilişkiler ise "sahip-ol" ilişkileri (Article bir Comment'e sahiptir, Photo bir Comment'e sahiptir, Comment ya Article'e ya da Photo'ya ait olabilir) için uygundur.