Rails Polymorphic Associations

2017, Nov 13    

Polimorfizm kelime anlamı olarak “birçok şekil” demektir. Programlama dillerinde ise genel anlamı itibari ile bir yapının başka yapılar tarafında kullanılabilmesini sağlayan özelliktir. Railsda da durum aynıdır. Rails da polymorphic ilişkiler sayesinde tek bir ilişki ile bir model birden fazla başka modele ait olabilir. Örneğin bir picture modeli oluşturalım ve bu model hem employee hem de product modeline ait olsun.

rails g model employee name:string
rails g model product title:string
rails g model picture title:string imageable_id:integer imageable_type:string

Ardından oluşturduğumuz modellere ilişkileri tanımlıyoruz.

employee ve product modellerinin birden fazla picture modelini kullanabilir. Bu sebeple has_many ilişkisi oluşturduk. picture modeli ise imageable’ı referans alarak hem employee hem de product modeline ait olabilir. Burada t.references :imageable, polymorphic: true ifadesi ile polymorphic türünü ve id’sini tutabiliyoruz. Polymorphic ilişki tanımlamamız bu kadardı şimdi de bunu test edelim.

Öncelikle rails console’a gidip bir employee oluşturmayı denemelim.

Ardından da employee’ye ait bir picture oluşturalım. poli image 1

Şimdi de oluşturduğumuz employee için bir picture oluşturalım. poli image 2

Son olarak da employee modelimize ait bütün pictures’lara ulaşmayı deneyelim. poli image 3

Gördüğünüz gibi sağlıklı bir şekilde polymorphic ilişkimizi oluşturduk. Burada eğer önce picture’ı oluşturup daha sonra model’e bağlamak istiyorsak imageable_type ve imageable_id kısımlarını da doldurmamız gerekiyor.

İşlemlerimiz burada bitti. Eğer yazıda bir hata ya da eksik olduğunu düşünüyorsan yorum olarak belirtmeni çok isterim.

Sevgiler

Kaynaklar: rubyonrails.org