2015-11-08 15 views
0

我有一個應用程序,用戶可以根據他們選擇的日期和時間生成事件。對於這些我使用:t.date :event_datet.time :start_time將數據存儲在我的數據庫(MySql開發和Postgres在生產中)。我使用了這兩種類型,因爲我能夠找到一個方便的bootstrap風格的datepicker和timepicker,看起來不錯。我現在遇到的問題是在我的活動索引頁面上。我想將訂閱源限制爲時間尚未到達的事件。也就是說,我想隱藏過去發生的事件。我能有這個很容易限制的日期在我的控制器:隱藏事件start_time <Time.now in Rails

def index 
    @events = Event.where('start_date >= ?', 
    Date.today).order("start_date ASC", "start_time ASC").paginate(page: 
    params[:page], per_page: 5) 
end 

但由於時間列的格式在2000年開始,我不能想辦法來限制基於時間的事件好。時區不是什麼大問題,因爲我預計該應用只能在本地使用。

+1

您可以更改模式以使用單個時間戳列嗎?如果你想留在你使用的UI小部件中,你總是可以在你的控制器(或模型)中組合這兩個值。我提出這個問題是因爲PostgreSQL中的'time'列只是一個時間段,但在Ruby中沒有時間類,所以ActiveRecord使用與時間戳相同的類(因此,奇怪的外觀2000)。 '時間'在數據庫中非常有意義,但在Ruby中使用起來很麻煩。 –

回答

0

我認爲使用時間字符串將工作。 您可以在區域設置文件中添加一個新的格式與此查詢使用方法:

time: 
formats: 
    time: "%I:%M:%S" 

然後:

@events = Event.where('start_date >= ? AND start_time > ?', Date.today, I18n.l(Time.now, format: :time)) 

儘管如此,批評家是正確的,在Rails的時間列是有點一起工作的麻煩。