我有一个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 %>¤t_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
你可以在控制器中发布'updated_at'和'current_time'的值吗? – vee
这将是一个好主意..将更新刚才的问题 – martincarlin87
第一次观察:你将两个日期作为字符串进行比较 - 这几乎总是一件坏事。您应该使用内置的DateTime比较行为进行比较。 –