Ben uyarılar için benim indeks sayfasında benim uygulamadanRaylar
class Polling
has_many :alerts, :dependent => :destroy
class Alert
belongs_to :polling
bir üst/alt ilişkisi olan bir sonucu olarak Active kayıt seçme ebeveyn ve çocuk, ben her bir ebeveynden bazı verileri göstermek gerekir ve bu her biri aracılığıyla döngü vardır ve aynı zamanda ebeveyn nesne çekerken iki sorgular Açıkçası
Alert Load (6.1ms) SELECT * FROM (SELECT * FROM "ALERTS" INNER JOIN "POLLINGS" ON "POLLINGS"."ID" = "ALERTS"."POLLING_ID" ORDER BY "ALERTS"."ID" DESC) WHERE ROWNUM <= 1
Polling Load (1.8ms) SELECT "POLLINGS".* FROM "POLLINGS" WHERE "POLLINGS"."ID" = 10113 AND ROWNUM <= 1
sonuçlanır, bu sayfa yükleme süresi oldukça korkunç hale getirir.
Ben
> Alert.joins(:polling).where(...)
> Alert.includes(:polling).where(...)
> Alert.joins(:polling).select('*').where(...)
gibi bir kaç şey, denedim Ve ben indeks sayfasını ziyaret ettiğinizde her zaman iki ayrı sorgular olsun. Her bir Uyarı için bir tane ve daha sonra ebeveyn verilerini almak için başka bir tane. Bunu bir satırda nasıl yapabilirim, böylece uyarıları aldığımda da ilişkili ebeveyn verilerini alırım? Diğer ucundan gitmenin bir yolu yok gibi görünüyor çünkü eğer bir Pollings.where(...)
yaparsam çocukları bir grup olarak yakalamıyor. Eğer ayrıntılı olarak SQL belirtmek istiyorsanız
İçerme yöntemiyle kesinlikle doğru yoldasınız. Diğer açı Polling.includes (: alert) .where (...) denemek olacaktır. Görüntüleme kodunuzu gönderir misiniz? – steakchaser
Buradaki şey, ebeveyn tarafına değil, çocuk tarafına gitmeliyiz. – Oranges13
Önyükleme yapmak istemiyor musunuz? http://apidock.com/rails/ActiveRecord/AssociationPreload/ClassMethods/preload_associations – toxaq