Rails - 定义自定义年份

时间:2015-12-06 22:14:35

标签: ruby-on-rails ruby

我需要将自定义月份范围定义为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可以实现吗?或者是否有更好的方法按自定义月份范围进行分组?

1 个答案:

答案 0 :(得分:0)

如果您在模型上添加客户字段(例如quarter,然后使用group_by API,则会有所帮助。

def quarter
  "#{created_at.month/4}, #{created_at.year}"
end