我想知道如何以下列格式打印数据库中的数据:
January 25
- record 1
- record 2
- record 3
- record 4
- record ...
January 26
- record 1
- record 2
- record 3
- record 4
- record ...
...
有没有办法用ActiveRecord做到这一点?
我唯一的想法是从数据库(@data = Model.order(created_at DESC).limit(50)
)获取数据,然后在相应的视图中有一个帮助变量,我将保留当前数据,并在循环通过@data
时记录有与帮助变量中的日期不同,我会将此新日期保存到help变量并继续循环。
但这不是很清楚和优雅,可能会有一个问题,我会打印出一个日期,并且不会打印出来自@data
的数据,如下所示:
1月25日 - 记录1 - 记录2 - 记录3 - 记录4 - 记录......
January 26
- record 1
- record 2
- record 3
- record 4
- record ...
January 27
[nothing here]
解决此问题的最佳方法是什么?
提前谢谢。
答案 0 :(得分:2)
您想要的转换称为分组。在Ruby中有一个special method。在你的情况下,你可以做
Model.order(created_at: :desc).limit(50).group_by { |record| record.created_at.to_date }
另请注意order(created_at: :desc)
;它是你SQL的语法糖。
答案 1 :(得分:0)
假设你想打印过去一个月的项目。
@items = Model.all
date_today = Date.today
# if you want for the last one week
# this_week = (date_today.at_beginning_of_week..date_today.at_end_of_week).map.each { |day| day }
this_month = (date_today.at_beginning_of_month..date_today.at_end_of_month).map.each { |day| day }
this_month.each do |month_day|
day = month_day.to_date
puts "#{day.strftime("%Y-%m-%d")}:"
@data = items.select{|i| i.visit_date.to_date == day}.limit(10)
#loop through every item
@data.each {|d| puts "#{ d}}
end
你可以写一个更干净的代码。我希望有所帮助。