2013-07-09 155 views
0

我試圖用scope來挑選今天發生的事件,並在接下來的7天內使用它們的開始日期和結束日期(我還處理UTC + 7的時區) :活動記錄日期範圍選擇

# scopes for date_start within 7 days on either side 
t = Time.now.in_time_zone("Bangkok") 
scope :seven_days, lambda { where("date_start <= ? AND date_start >= ?", t+7.days, t-7.days) } 

因此,這個選項會在最近7天內啓動並在接下來的7天內啓動。但是我怎樣才能找到一些正在運行的東西,比如2個月前,2個月後呢?所以它在未來7天(今天)仍然活躍,但在範圍之外開始和結束?

謝謝!

回答

2

假設你有一個名爲date_end屬性:

t = Time.now.in_time_zone("Bangkok") 
scope :seven_days, lambda { 
    where("date_start >= ? AND date_start <= ? OR 
    date_start <= ? AND date_end >= ?", 
    t-7.days, t+7.days, t-7.days, t+7.days) 
} 
+0

謝謝Fabian_Winkler。你能解釋一下這背後的邏輯嗎?我不明白OR如何在這裏工作。 – matski

+1

所以讓我們使用圓括號來使邏輯更加明顯: '(date_start≥?AND date_start≤?)OR(date_start≤?AND date_end≥?)' 第一部分選擇在過去7天內開始的所有事件,在未來7天內開始。 第二部分將選擇7天前開始的所有活動,並將在7天以上結束。 「OR」運算符(也稱爲邏輯析取)將兩個子集連接起來。 –

+0

好,太好了。似乎工作。謝謝! – matski