2010-12-15 10 views
6

İki model Kullanıcı ve Etkinlik var. Esas olan bir Kullanıcı'nın birçok Etkinliği var. Bana tüm kullanıcıları ve karşılık gelen olayları vermek için veritabanını sorguladığımda doğru sonuçları verir. Örnek ifadesi: Users.find (: tümü,: include => [: olaylar]) Ben bir koşula dayalı bir kullanıcı için etkinlikler elde etmektir konuda yardıma ihtiyacınız olduğunu BununlaRuby on Rails - Sınırlı sayıda nesne yüklemek için ': include =>' koşulunu ekleyin

. Her bir Kullanıcı için, bugün için planlanan Etkinliklerin (ör: CREATED_DATE = TODAY) elde edilmesi için döndüm. Yani, Kullanıcılar ile ilişkili tüm olayları istemiyorum. Veritabanında bulunan tüm Kullanıcılara hala ihtiyacım olduğunu, ancak bugün için planlanmış bir Etkinliği olmayan kullanıcıların bir kısmına, karma haritasına yüklenmiş bir Etkinliğin olmaması gerektiğini söyledi.

birisi modifiye bana yardım edebilir Raylar deyimi yüzden Kullanıcılar için yalnızca belirli Olaylar, tüm Olaylar alabilirsiniz "Users.find (: Tüm: [olayları] => dahil)"? açıkladığınız şekilde seçeneği şunlardır:

sayesinde S Bildiğim kadarıyla

cevap

1

, kullanmak olamaz.

Tüm olayları almayla ilgili sorununuz ne? Zaten olay tablosunu yüklemek/katılmak/sorgulamak zorunda kalacaksınız. Tüm olayları anlatan, daha fazla belleğe ihtiyacınız olacak.

Tabii ki "günümüz" olayları olan kullanıcılar için bir tane, diğeri olmayanlar için iki sorgu yapabilirsiniz.

Event.find(:all, :conditions => "...only today...", :include => :user) 

kullanıcıları dahil olan bugün için size tüm olayları verecekti:

Ayrıca tersi gidebiliriz. Tüm kullanıcıları olayları dahil etmeden almak ve geri kalanını hafızada tutmak için başka bir sorgu kullanabilirsiniz. Bu doğrultuda

+2

Kullanıcı nesneleri ile çalışıyorum, Olayları Kullanıcılarda içerecek şekilde nesneleri nasıl tersine çevirebilirim ve yukarıdaki ifadede önerildiği gibi Kullanıcıları içeren Olayları değil ? Eğer kolayca yapabilirim (daha az işlem gerekli), bu çözüm işe yarayabilir. :) – partizan

+0

Ancak bu, henüz etkinlik olmayan kullanıcılara geri dönmeyecek. – lala

6

şey çalışmalıdır:

# Rails 3 
User.includes(:events).where(:events => {:created_at => Time.now.midnight..Time.now.tomorrow.midnight}) 

# Rails 2 
User.find(:all, :includes => :events, :conditions => ["events.created_at between ? and ?", Time.now.midnight, Time.now.tomorrow.midnight]) 

Time.now.tomorrow.midnight çok tiksindirici olduğunu. 1.day.from_now.midnight tercihinize bağlı olarak biraz daha az kötü olabilir;)

+3

Öneriniz için boş yere beklediklerim, ama yapmaya çalıştığım şeylere göre çalışacağını düşünmüyorum. Sorgu, Etkinlik olmayan Kullanıcıları değil, yalnızca Kullanıcıları iade etmeyecektir. Sorunum için tüm Kullanıcıları istiyorum ama bazılarının da Etkinlikleri var (eğer etkinlikleri bugün için planlanmışsa). – partizan

+0

Hiçbir olayı olmayan kullanıcıları dahil etmeyi düşündüm çünkü kullanmanın normal olarak ilişkilendirmelerini istekli olarak yüklemek için iki sorusu vardır. Görünüşe göre, karışımın nereye karıştığını ortaya koyarsanız, bu durum, yalnızca olayları olan kullanıcıları iade ettiğini açıklar. User.joins (: events) .where (yukarıdaki gibi) 'doğru sorguyu oluşturur (bir iç birleştirme kullanarak), ancak makaleleri hevesle yüklemiyor gibi görünmüyor. Hmm. – idlefingers