我需要将自定义月份范围定义为project_year。
而不是从1月开始到12月底结束的一年,我需要将project_year定义为从8月1日开始到7月的最后一天结束。
我需要按project_year分组所有报告,然后按月分组。报告具有report_month属性(dateTime)。基本上我需要显示这样的报告:
项目:
2015
八月
九月
十月
十一月
等
2014
八月
九月
十月
十一月
等
2013
八月
九月
十月
十一月
等
我一直在使用Array.sample方法,但没有成功。
reports = @station.reports.order("report_month asc")
range = reports.last.report_month.year..reports.first.report_month.year
range.to_a.each do |year|
start = year.beginning_of_year + 7.months
finish = (year.beginning_of_year + 1.year - 6.months).end_of_month
yr = reports.sample{ |r| report.report_month >= start and <= finish }
<h1><%= year.strftime("%Y")</h1>
yr.each do |m|
<h1><%= m.strftime("%b")</h1>
end
end
我意识到以上不合适的视图代码,我只是想表明我试图使用的方式。这变得很麻烦,很难排除故障。经过一段时间的努力,我决定在这里问。
最终我的理想是使用此处概述的group_by功能: http://railscasts.com/episodes/29-group-by-month仅使用group_by project_year。
Rails可以实现吗?或者是否有更好的方法按自定义月份范围进行分组?
答案 0 :(得分:0)
如果您在模型上添加客户字段(例如quarter
,然后使用group_by API,则会有所帮助。
def quarter
"#{created_at.month/4}, #{created_at.year}"
end