2011-03-30 15 views
5

Konsolda çok fazla oynama yaptıktan sonra, activerecord benzeri (Mongoid) nesnelerini bulundukları güne göre gruplandırmak için bu yöntemle geldim. Bunu başarmanın en iyi yolu olduğundan emin değilim, ama işe yarıyor. Daha iyi bir öneri olan var mı, yoksa bunu yapmak için iyi bir yol mu?Gün İçi Moğol Nesneleri Gruplandırıyor

#events is an array of activerecord-like objects that include a time attribute 
events.map{ |event| 
    # convert events array into an array of hashes with the day of the month and the event 
    { :number => event.time.day, :event => event } 
}.reduce({}){ |memo,day| 
    # convert this into a hash with arrays of events keyed by their day or occurrance 
    (memo[day[:number]] ||= []) << day[:event] 
    memo 
} 

=> { 
     29 => [e1, e2], 
     28 => [e3, e4, e5], 
     27 => [e6, e7], 
     ... 
    } 

Teşekkürler!

+1

Sorularınız MongoDB diyor ki:

events.inject({}) do |memo,event| (memo[event.time.day] ||= []) << event memo end 

Görünüşe göre bu gibi çalışır bir #group_by yöntemiyle Enumerable monkeypatches Raylar MongoId, ama ActiveRecord'dan bahsettin. MongoId veya ActiveRecord kullanıp kullanmadığınızı açıklayabilir misiniz? –

+0

Doğru, ActiveRecord benzeri nesneler demek istedim çünkü Mongoid ActiveRecord API'sini oldukça yakından yansıtıyor. Düzenlenen. – Adam

cevap

8

daha düşünce ve Forrst bazı yardımıyla sonra bu geldi:

events.group_by { |event| event.time.day }