0

変更のポーリングに関する Rails Casts エピソード #228 をフォローしようとしています。コメントの代わりに通知に使用していることを除いて、私は基本的にスクリーンキャストを一言一句フォローしています。唯一の違いは、彼が「コメント」という単語を使用するたびに、「user_notification」という単語を使用することです。彼が「コメント」という言葉を使うたびに、私は「user_notifications」を使います。また、スクリーンキャストのコメントは記事に属しているのに対し、私のアプリの user_notifications はユーザーに属しているため、「記事」という単語を「現在のユーザー」に置き換えます。最新の通知が下部に表示されることを除いて、user_notifications を正常にセットアップできました。show.html.erb ファイルの user_notifications に .order を追加して、これを修正しました (以下を参照)。問題は、JavaScript が「id > params[:after]」を使用してすべての user_notifications をポーリングするように指示しているため (以下のコントローラーのインデックス アクションを参照)、順序が変更されて以来、より高い ID で user_notifications を再追加することです。反転しました。これを修正するにはどうすればよいですか?

これが私のコードです:

user_notifications.js.coffee

@UserNotificationPoller =
  poll: ->
    setTimeout @request, 5000

  request: ->
    $.get($('#user_notifications').data('url'), after: $('.user_notification').last().data('id'))

jQuery ->
  UserNotificationPoller.poll()

show.html.erb

<%= content_tag :div, id: "user_notifications", data: {url: user_notifications_url} do %>
    <%= render current_user.user_notifications.order(created_at: :desc) %>
<% end %>

index.js.erb

$('#user_notifications').append("<%= j render(@user_notifications) %>");
UserNotificationPoller.poll()

user_notifications_controller:

def index
    @user_notifications = current_user.user_notifications.where('id > ?', params[:after].to_i)
end
4

0 に答える 0