我正在尝试创建一个类似这样的数组:
[ [created_at date * 1000, count record for that date],
[created_at date * 1000, count record for that date],
[created_at date * 1000, count record for that date] ]
created_at日期不完全相同,因为分钟,小时和秒。
我在想是否可以在创建时将created_at时间更改为00:00:00
我试过这个,
@kliks = Klik.all.map{|klik| [(klik.created_at.to_i * 1000), 1]}
但我还没想弄出那些在同一天创建的记录。此循环也为每个记录创建一个数组,我不想要总和的重复。
答案 0 :(得分:5)
Rails有ActiveRecord::Calculations,它可以在数据库级别完成这类工作。你应该使用它。在这种情况下,count
是您想要的方法:
@kliks = Klik.count( :group => "DATE( created_at )" )
这相当于以下SQL:
SELECT *, COUNT(*) FROM kliks
GROUP BY DATE( created_at )
DATE()
函数是MySQL将日期时间(例如created_at
,例如2012-02-27 10:08:59
)更改为明日期(例如2012-02-27
)。无需将事物转换为整数或乘以分钟和秒,也无需在Ruby中使用map
或任何其他方法。
答案 1 :(得分:3)
根据query guide,您应该尝试使用
items = Klik.select("date(created_at) as creation_date, count(*) as count").group("date(creation_date)")
result = items.map { |k| [ k['creation_date'], k['count'] ] }
答案 2 :(得分:1)
以下内容将产生您要求的结果:
Klik.all.group_by do |k|
k.created_at.beginning_of_day
end.map do |date, records|
[date, records.length]
end