在开始日期到结束日期的值记录的哈希值

时间:2016-05-13 15:58:53

标签: ruby-on-rails

我有一个Event模型,其start_dateend_date属性。我正在尝试创建一个以日期为键的哈希值,它的值将是一个数组。该数组将包含该日期发生的事件。如果该日期在该事件的开始日期和结束日期之间或之间,则称该事件在该日期发生。希望我有意义。我有一些代码,它为我提供了一个由start_date分组的事件的哈希。它给我一个哈希,日期为键,值为数组。该数组具有其开始日期与键相同的事件。虽然这是完整的解决方案。有人能帮我吗?我很感激。

代码我的解决方案不完整:

Event.all.group_by(&:start_date)
{Thu, 12 May 2016 05:59:34 UTC +00:00=>[#<Event id: 1, title: "Vacation", starts_at: "2016-05-12 05:59:34", ends_at: "2016-05-22 05:59:36", available: false, event_type: "vacation", practitioner_id: 1, maximum_prayers: 10, created_at: "2016-05-12 06:00:41", updated_at: "2016-05-12 06:00:41">], Fri, 13 May 2016 13:26:59 UTC +00:00=>[#<Event id: 2, title: "Meditation break", starts_at: "2016-05-13 13:26:59", ends_at: "2016-05-23 13:27:03", available: false, event_type: "vacation", practitioner_id: 1, maximum_prayers: 10, created_at: "2016-05-13 13:27:24", updated_at: "2016-05-13 13:27:24">]}

1 个答案:

答案 0 :(得分:3)

这是一个可能是你想要的例子。它遍历每个事件。对于每个事件,它将循环遍历范围中的每个日期,并将其添加到该日期的数组中。

Event.all.each_with_object(Hash.new { |h, k| h[k] = [] }) do |event, hash|
  (event.start_date.to_date..event.end_date.to_date).each do |dt|
    hash[dt].push event
  end
end