Rails DateTime比较错误

时间:2013-08-07 18:51:26

标签: ruby-on-rails ruby prototypejs ruby-on-rails-2

我有一个ticket类,其默认的rails列为updated_at,所以当有人在故障单页面上进行更新时,我正在轮询数据库以查看其他人是否在同一时间。

在视图中,如果我这样做,它可以工作

<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_update控制器中的ticket

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

1 个答案:

答案 0 :(得分: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"