2014-09-30 133 views
0

我有一個有開始和結束日期的事件表。根據日期重複記錄 - 導軌

現在我想獲取特定日期的事件。即如果我提供2014年5月1日,即2004年5月2日,我需要當天發生的所有事件(根據開始和結束日期)。我需要根據開始日期對事件進行分組,並將它們顯示爲列表。

現在的問題是,如果一個事件發生兩天,說5月1日和5月2日,我需要在列表中,像這樣兩次顯示事件:

1 May 2014 
EventName 

2 May 2014 
EventName 

我不知道該怎麼辦這...任何人都可以幫我想出一個有效的方法來做到這一點?

+0

其實我沒有紅寶石,你可以嘗試thsi代碼'起始日期= some_date END_DATE = other_date 事件= Event.where(:START_DATE => [:start_date,end_date])。其中(:end_date => [start_date,end_date]) events.each do | event | puts「#{event.date}」 puts「#{event.name}」 end 'hope it helps – Sontya 2014-09-30 12:45:14

+0

要按照排序順序打印它,在循環'events.sort_by!之前! {|事件| event.start_date}',它會根據start_date排序事件 – Sontya 2014-09-30 12:51:43

+1

我相信你想迭代開始日期和結束日期之間的日期,並且每天顯示那天在該事件的開始日期和結束日期之間的事件。我現在正在使用手機,但您可以查詢開始日期和結束日期之間的所有事件,然後在開始日期和結束日期之間進行迭代。在該塊內部,您可以使用select查詢來獲取當天發生的事件。 – 2014-09-30 12:51:48

回答

1
events = Event.where("start_date >= ? AND end_date <= ?", start_date, end_date) 

display_events = Hash.new 

(start_date..end_date).each do |date| 
    display_events[date] << events.select { |event| event.start_date <= date and event.end_date >= date } 
end 

在這裏,你最終不得不通過日期分組事件的哈希值。 (我在手機,所以我無法測試它)

+0

謝謝你!我從來沒有想過這樣:)現在它有很多的意義! – 2014-09-30 17:12:02

+0

很高興能幫到你! – 2014-10-01 12:06:58

2

要讓事件出現兩次,我會將單獨創建的集合添加到一起。

events = [] 
(start_date..end_date).each do |date| 
    events += Event.where("start_date >= ? and end_date <= ?", date, date) 
end 
events 
+0

那麼查詢開始和結束日期之間的事件只需要一次,然後使用select來獲取每一天的事件會更有效率嗎? – 2014-09-30 12:57:49

+0

@JoãoDaniel可能不會,你的方法聽起來不錯。 – SteveTurczyn 2014-09-30 13:25:27

+0

謝謝史蒂夫:) – 2014-09-30 17:12:52

0

嘗試獲取和顯示不是事件的基礎上,在每個迭代day.i.e數據的所有事件的事件日期的基礎上,而迭代。

s_date = Date.parse('2010-09-29') 
e_date = Date.parse('2010-09-30') 

sd.upto(ed) do |date| 
    @events = Event.event_on_date(date) 
end 
+0

謝謝尼廷。當我想到日期的時候,這是有道理的! :)謝謝 – 2014-09-30 17:12:24