我正在尝试为@challenges
创建时间表。对于那些有:deadline
的挑战,我希望他们根据:deadline
在时间轴上进行组织,对于那些有:date_started
的挑战,我希望他们按照时间表排列他们的:date_started
。
如果质询有:deadline
,则date_started
为nil
,反之亦然。
2016
February
CHALLENGE 1 (Deadline: 1st)
CHALLENGE 2 (Date_Started: 3rd)
CHALLENGE 3 (Deadline: 18th)
@challenges = current_user.challenges
@challenges_timeline = @challenges.group_by { |t| t.deadline.beginning_of_year + t.date_started.beginning_of_year }
<% @challenges_timeline.sort.each do |year, challenges| %>
<%= year.strftime('%Y') %>
<% challenges.group_by { |t| t.deadline.beginning_of_month + t.date_started.beginning_of_month }.sort.each do |month, challenges| %>
<%= month.strftime('%B') %>
<% for challenge in challenges %>
<% if challenge.deadline.present? %>
<%= challenge.deadline %>: <%= challenge.action %>
<% end %>
<% if challenge.date_started.present? %>
<%= challenge.date_started %>: <%= challenge.action %>
<% end %>
<% end %>
<% end %>
<% end %>
答案 0 :(得分:0)
如果两个日期相互否定,也许您应该只有一个日期字段,另一个字段用于显示日期是开始还是结束。这将允许您在数据库级别进行分组,从而节省一些处理时间。
一个简单的实例方法,例如
def timeline_date
deadline || date_started
end
允许简单分组,例如
challenges.group_by { |c| c.timeline_date.beginning_of_month }
||
块中使用group_by
。