İç içe modelleme (nested attributes) kullanıyorlar büyük ihtimalle. Twitter'ın Rails tabanlı yola çıktığını düşünürsek, Rails kullananların çok aşina olduğu act_as_taggable, act_as commentable gibi gem (paket) ler bu işi oldukça kolaylaştırıyor. Laravel de biri buna benzer paket geliştirmiş geçen görmüştüm. İleride Laravel de buna benzer paketlere daha müsait olabilir, çünkü PHP dünyasının Rails'ini yaratmaya çalışıyorlar. Şu an Laravel'de de nested models var ancak bu derece pratik değil.
Örneğin Rails'de bir post içine ilişkili fotolar eklemek için basitçe şu yapılır.
class Post < ActiveRecord::Base
belongs_to :user
has_many :images, :as => :imageable, dependent: :destroy
accepts_nested_attributes_for :images
end
"imageable" dediği anda her photo_id post_id ile ilişkilendiriliyor ve dependent: destroy ile mesaj silindiği anda fotoğrafların silinmesini de şart koşabilirsin.
Burada avantaj şu: Tek bir foto tablosunu bir çok modele ilişkilendirebilirsin. Örneğin
class Album< ActiveRecord::Base
belongs_to :user
has_many :images, :as => :imageable, dependent: :destroy
accepts_nested_attributes_for :images
end
Burada da album_id ile photo_id ilişkilendirildi.
Hem kullanıcı albümleri, hem yorum ya da mesajlardaki fotolar aynı tabloda tutuluyor. Hangi fotonun hangi modele (albüm ya da mesaj) ait olduğu da bu tablo içinde tutuluyor.
Şimdi burada akla gelen şu facebook twitter bunun daha ilerisinde bir çözüm kullanıyorlardır ama nasıl?. Çünkü 1 milyar kullanıcısı olan bir sitede tüm fotolar tek tabloda toplamak ve sorgulamak imkansız..Ama temel mantığın yukarıdaki gibi olduğunu düşünüyorum.