2016-04-07 14 views
0

Aşağıdaki özniteliklere sahip bir hayvan modelim var.Tek bir türe göre birden çok özellik türüne sahip bir nesneyi sıralamanın bir yolu var mı?

name: string 
sex: string 
acquired_at: datetime 
fed_at: datetime 
groomed_at: datetime 
played_with: datetime 
slept_at: datetime  
sold_at: datetime 

ve en son datetime ile sütun görüntülemek istiyorum, ama sadece bakımlı beslemeli, için, uyudu ve en son zamanların ile değişen sürekli olacak sütunlar, oynarlar. Nesneyi Animal.last gibi almanın ve 4 sütunun en son datetime sahip sütunu almanın bir yolu var mı?

Şu anda sadece 4 sütunu birbirine karşı kontrol eden bir ifade var, ancak uzun ve gereksiz görünüyor.

+0

Yığın Taşması'na Hoş Geldiniz. Lütfen "[sor]" ve "[mcve]" mesajlarını okuyun. Sorunu çözme çabalarınızı göstermek önemlidir. Bunu çözmek için ne yazdın? SO, "kodumu yaz" sitesi değil, yazdığınız koddaki sorunu çözmeye yardımcı olmak için, bu yüzden sorunu göstermek için gerekli olan minimum kodu bize göstermek önemlidir. –

+0

Her bir etkinliği ayrı bir tabloda bir satır haline getirmenin bu kadar kolay olmasını isterim –

cevap

1

sütun eski olduğunu bilmek gerekmiyorsa, dört sütun en son zaman değeri, sadece kayıt attributes arasından seçim yapmak için max kullanabilirsiniz karma dönüştürülür:

Animal.last.attributes. 
    slice("fed_at", "groomed_at", "slept_at", "played_with"). 
    max_by{ |k,v| v } 
# => e.g. [ "groomed_at", Thu, 07 Apr 2016 00:18:04 CEST +02:00 ] 
: Eğer dört sütun yanı sıra sütun adından en son değeri almak gerekir DO ise
Animal.last.attributes.values_at("fed_at", "groomed_at", "slept_at", "played_with").max 
# => Thu, 07 Apr 2016 00:18:04 CEST +02:00 

, sen attributes karma en son anahtar-değer çiftini seçmek için max_by kullanabilirsiniz

Bu, birinci öğe ile bir özellik dizisi döndürecek ve ikinci öğe değeri en son olan değerdir.

1
Animal.all.sort_by{|a| [a.fed_at, a.groomed_at, a.slept_at, a.played_with].max}.last 
+2

Biçimlendirme okunabilirlik açısından çok önemlidir. Ayrıca, hiçbir açıklama olmaksızın kod atmak neredeyse açıklamaya yetmez. * NEDEN * kod kullanılabilir ve ne işe yarar. Birisine balık tutmayı öğretmek gibi balıklara öğretmek gibi. Gelecekte sorunun nasıl önleneceğini de bilmelerini istiyoruz. –

İlgili konular