0

ticketデフォルトのレール列を持つクラスがあるので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
4

1 に答える 1