Bu, "Bunu nasıl yapacağımı bilmiyorum" sorusundan ziyade, "işler neden bu şekilde çalışıyor" sorusundan daha fazlası ...
Bu nedenle, kullanacağınızı bildiğiniz ilişkili kayıtları çekme müjdesi kullanmaktır, :include
çünkü birleştirme elde edersiniz ve bir sürü ekstra sorgudan kaçınırsınız:
Post.all(:include => :comments)
Ancak günlüklere baktığınızda, birleşme gerçekleşmez:
Post Load (3.7ms) SELECT * FROM "posts"
Comment Load (0.2ms) SELECT "comments.*" FROM "comments"
WHERE ("comments".post_id IN (1,2,3,4))
ORDER BY created_at asc)
O edilir aynı anda tüm yorumları çeker çünkü bir kısayol alarak, ama bir katılmak hala değil (ki tüm belgeler söylemek göründüğü gibi). Ben bir katılmak alabilirsiniz tek yolu :joins
yerine kullanmaktır :include
:
Post.all(:joins => :comments)
Ve günlükler şunları gösterir:
Post Load (6.0ms) SELECT "posts".* FROM "posts"
INNER JOIN "comments" ON "posts".id = "comments".post_id
Bir şey mi kaçırıyorum? Yarım düzine dernek ile bir uygulama var ve bir ekranda hepsinden veri görüntülemek. 6 kişi yerine birleştirilmiş bir sorguya sahip olmanın daha iyi olacağı anlaşılıyor. Performans açısından, tek tek sorgulardan ziyade birleştirme yapmak her zaman daha iyi olmadığını biliyorum (aslında harcanan zamana gidiyorsanız, yukarıdaki iki ayrı sorgu birleştirmeden daha hızlı görünüyor), ancak tüm dokümanlardan sonra :include
Okudum, reklamı yapılmadığını görmek beni şaşırttı .
Belki Raylar olduğu performans sorununun vakıf ve bazı durumlar dışında katılmak etmiyor?
includes
( bunu okuyan herkes için)