Rails

2012-09-21 13 views
10

içinde hem ay hem de yıl olarak Grup kayıtları Ben Ruby 1.9.2, Rails 3.0.x üzerinde ve ben MySQL DB kullanın. Her gün yeni mesaj gönderebileceğiniz bir Mesaj Modelim var.Rails

Bu iletileri hem ay hem de yıl olarak gruplandırılmış olarak görüntülemek istediğim bir dizin işlemim var. Bu temelde mesajları filtrelemek için kullanılır.

Benim sorgu şöyle görünür: -

@active_msgs = Messages.where('expiry > ?', Time.now).order('created_at DESC') 

Ben this post

Benim Grubu tarafından Query atıfta sonra, Rails group_by fonksiyonunu kullanılır: -

@msgs_by_month = @active_msgs.all.group_by {|u| u.created_at.month } 

Ben @msgs_by_month adlı bir Hash döndürdü. Bu bana grubunu ay mesajları yardımcı oldu ama beni eg arasında ayrım yardımcı olacağını olarak, , benzersiz bir anahtar oluşturmak üzere yıl dikkate alınması için, Eylül 2011 ve Eylül 2012'de

Bulunduğum anahtara ihtiyacınız Sadece Hash [Ay] cinsinden (örneğin, Eylül ayı için Hash [9] =>, tüm uygun değerleri görüntüleyebilirim). Ayın ve Yılı Oluşturma yılına göre gruplandırılmış tüm kayıtları görüntülemek için kolayca döngü yapabileceğim tür ayının benzersiz bir anahtarını nasıl alabilirim?

Bunu yapmanın bir yolu tahmin ediyorum

, kullanacağım created_at.to_date api yapmaktır, here sağlanan -:

DÜZENLEME teşekkür ederiz. Ben sadece bir benzersiz ay ve yıl kombinasyonu anahtar almak için created_at.to_date den güne çıkarmaz nasıl, acaba hangi olabilir group_by fonksiyonu ile eser. SQL

+0

[gün/ay/yıl TARAFINDAN MySQL Query GROUP] olası yinelenen (http://stackoverflow.com/questions/508791/mysql-query-group-by-day-month- yıl) – noodl

+0

Hayır, yinelenmez. sadece qsql ile ilgili olan q, bu q bir ray + mysql .. – Philip

cevap

29

:

select * from messages group by year(created_at), month(created_at); 

Rails:

Message.all.group_by { |m| m.created_at.beginning_of_month } 
+0

teşekkürler dostum .. :). Ben de sorgu içine nereye cümleyi girdiğimde çalışır .. Sadece tüm bilgi için .. – boddhisattva

0
Message.select("date_trunc('month', created_at) as month").group("month")