2016-03-23 7 views
2

farklı bir isim olduğunda bu (! İlk kez bir cevap bulamadım)sırala 2 tarihe göre ActiveRecords - Tarih alanları RAYLI

burada benim ilk yazı ben 2 Kayıtlar

Course.spotlight 
NewsItem.spotlight 

Her ikisi de 5 kayıt döndürür.

@spotlight = Course.spotlight + NewsItem.spotlight 

Course.spotlightrelease_date göre sıralanır ve NewsItem.spotlightpublish_at göre sıralanır ve her iki tarih alanları şunlardır: Ben onları birleştirdik.

Benim sorum şu ki (şimdi bir araya getirildikleri) tarih alanları farklı adlar olduğunda bunları tarihe göre nasıl sıralayabilirim?

cevap

3

Ruby yöntemini sort_by kullanabilirsiniz:

@spotlight = @spotlight.sort_by do |record| 
    if record.respond_to?(:release_date) 
    record.release_date 
    else 
    record.publish_at 
    end 
end 
# sort by date ASC, you can use reverse! to change to order to DESC 
# @sportlight.reverse! 

Bu kod her @spotlight kayıtlar daima release_date veya publish_at (Yakut Tarih ile nil karşılaştırmak olamaz) ya çağıran bir tarih dönecektir anlamına gelir. Ayrıca, @spotlight (yüzlerce kayıt veya daha fazlası gibi) bir çok kayıtlarınız varsa bu performanslarda pahalı olabilir.

+0

Bu onları sıralar - ama bunları seri halinde sıralar - önce sıralanır Dersler ve sonra sıralanmış NewsItems. Şu anda aradığım karışık içeriği almıyorum –

+0

Bununla ne demek istiyorsun? Çıktının bir örneğini verir misiniz? – MrYoshiji

+0

Öyleyse Kurs 1 - Kurs 2 - Kurs 3 - NewsItem 1 - NewsItem 2 - NewsItem 3. Beklemiyorum Ancak, Kurs 1 - NewsItem1, Kurs 2, NewsItem 2, Kurs 3, NewsItem 3 –