2016-05-13 12 views
0

Ich habe ein Event Modell mit start_date und end_date Attribute. Ich versuche, einen Hash mit Datum als Schlüssel zu erstellen, und sein Wert wäre ein Array. Das Array wird aus Ereignissen bestehen, die an diesem Datum auftreten. Ein Ereignis soll an diesem Datum auftreten, wenn dieses Datum am oder zwischen dem Startdatum und dem Enddatum dieses Ereignisses liegt. Hoffe ich mache Sinn. Ich habe den Code, der mir einen Hash mit Ereignissen von start_date gruppiert. Es gibt mir einen Hash mit Datum als Schlüssel und Wert als Array. Dieses Array verfügt über Ereignisse, deren Startdatum dem Schlüssel entspricht. Obwohl dies eine vollständige Lösung ist. Kann mir jemand helfen? Ich schätze es.Hash von Datensätzen mit Werten im Startdatum bis zum Enddatum

Code I mit unvollständigen Lösung haben:

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

Meinen Sie, dass Sie einige Ereignisse in diesem Hash mehrere Male benötigen (diejenigen, die mehrere Tage umfassen)? – Vasfed

+0

Ja. Das ist, was ich will – Saurabh

Antwort

3

Hier ist ein Beispiel, das sein kann, was Sie wollen. Es durchläuft jedes Ereignis. Für jedes Ereignis wird jedes Datum im Bereich durchlaufen und zu einem Array für dieses Datum hinzugefügt.

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 
Verwandte Themen