2016-05-13 152 views
0

我有一个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">]} 
+0

你的意思是说你需要一些事件在多次散列(那些跨越几天)? – Vasfed

+0

是的。这就是我想要的 – Saurabh

回答

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 
相关问题