Rails da default_scope kullanmak neden kötü fikir?

2017, Nov 26    

Rails da Active Record, model üzerindeki bütün işlemler için varsayınlan bir kapsamı default_scope aracılığı ile belirler. Bu yazıda neden default_scope kullanmanın kötü bir fikir olduğundan bahsedeceğim.

Öncelikle bir Post modelimizin olduğunu varsayalım. Ve onun için bir default_scope belirleyelim.

class Post
  default_scope where(published: true).order("created_at desc")
end

Modelimize default_scope’u tanımladıktan sonra bazı beklemediğimiz davranışlar otomatik olarak eklenecektir.

1) default_scope’u geçersiz kılamayız

Yukarıdaki sorguda ilk 10 adet post’a ulaşmak istiyoruz ancak varsayılan olarak default_scope tanımlı olduğu için postları created_at field’ını dikkate alarak listeler.

Eğer Post‘ları sıralamak için created_at değil de updated_at kullanmak istersek;

yukarıdaki sorguda gördüğünüz gibi hem created_at hem de updated_at’e göre sıralama yapacaktır. Çünkü default_scope üzerine yazılamaz. İşlemlerimizde default_scope’u devre dışı bırakmak için unscoped‘ı kullanabiliriz.

2) default_scope model initialization’ı etkiler

Örneğin yeni bir Post oluşturmak istediğimizde, modelimizin içerisinde default_scope tanımlı olduğu için oluşturma işlemini doğrudan etkileyecek ve yeni oluşturacağımız post’un published field’ını true olarak verecektir.

Birçok developer default_scope ile yalnızca sorgularının etkilendiğini düşünmektedir. Ama ne yazık ki hiç istemediğimiz sonuçlar doğabilir. Bu yüzden uygulamalarımızda default_scope yerine normal scope’u kullanmak sonrası için daha kullanışlı çözümler sağlamaktadır.

Kaynaklar
rails-bestpractices

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

Sevgiler