Rails - 如何从数据库中选择数据并在白天打印出来?

时间:2015-01-25 15:50:46

标签: mysql ruby-on-rails ruby date

我想知道如何以下列格式打印数据库中的数据:

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]

解决此问题的最佳方法是什么?

提前谢谢。

2 个答案:

答案 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

你可以写一个更干净的代码。我希望有所帮助。