2013-08-07 92 views
0

我有一個ticket類,它的默認rails列爲updated_at,所以當有人在更新的故障單上時,我正在輪詢數據庫以查看是否有其他人同時更改了它。Rails日期時間比較Bug

在視圖如果我這樣做它的工作原理

<p>Updated at: <%= @ticket.updated_at.to_time.strftime('%Y-%m-%d %H:%M:%S') %></p> 
<p>Current time: <%= Time.now.strftime('%Y-%m-%d %H:%M:%S') %></p> 

<% current_time = Time.now %> 

<% if @ticket.updated_at > Time.now %> 
    <p>Ticket has been updated</p> 
<% else %> 
    <p>Ticket has not been updated</p> 
<% end %> 

因此,這裏是Ajax請求(庫爲原型,我是新來的,更喜歡的jQuery):

<script type="text/javascript"> 
    function checkTicketUpdate() { 

     var url  = '/ticket/check_ticket_update'; 
     var parameters = 'id=<%= @ticket.id %>&current_time=<%= current_time %>' 
     var container = 'ticket_updated_container'; 
     var myAjax  = new Ajax.Updater(container, url, {method: 'get', parameters: parameters}); 

     setTimeout(checkTicketUpdate, 5000); 
    } 

    checkTicketUpdate(); 
</script> 

這裏是所述check_ticket_updateticket控制器:

def check_ticket_update 
    if params[:id] 
    @ticket = Ticket.find_by_id(params[:id].to_i) 
    end 
    updated_at = @ticket.updated_at.to_time.strftime('%Y-%m-%d %H:%M:%S') 
    current_time = Date.parse(params[:current_time]).strftime('%Y-%m-%d %H:%M:%S') 

    if updated_at > current_time 
    render :partial => 'ticket/ticket_updated' 
    end 

end 

這被錯誤地說第在視圖中的相同測試說它沒有但我看不到導致此行爲的錯誤時,已更新票證。

更新

我更新了部分吐出每個日期時間的值:

Ticket has been updated 
Updated at: 2013-08-07 16:35:38 # correct datetime from database 
Current Time: 2013-08-07 00:00:00 # wrong... 
Raw value of params[:current_time]: Wed Aug 07 20:26:29 +0100 2013 
+0

你可以在控制器中發佈'updated_at'和'current_time'的值嗎? – vee

+0

這將是一個好主意..將更新剛纔的問題 – martincarlin87

+1

第一次觀察:你將兩個日期作爲字符串進行比較 - 這幾乎總是一件壞事。您應該使用內置的DateTime比較行爲進行比較。 –

回答

3

Date是,嗯,日期。日期一天時間的分辨率,所以沒有小時,分鐘,...例如:

>> Date.parse('2013-08-07 16:35:38').strftime('%Y-%m-%d %H:%M:%S') 
=> "2013-08-07 00:00:00" 

這意味着,你current_time字符串具有的小時,分​​鍾和秒零。也許你想用DateTime代替:

>> DateTime.parse('2013-08-07 16:35:38').strftime('%Y-%m-%d %H:%M:%S') 
=> "2013-08-07 16:35:38" 
+0

......該死的。感謝您的幫助,非常感謝 – martincarlin87