0

我正在尝试按照 rails casts 第 228 集轮询更改。我基本上是逐字逐句地跟踪截屏视频,只是我将它用于通知而不是评论。唯一的区别是每次他使用“评论”这个词时,我都会使用“用户通知”这个词。每次他使用“评论”这个词时,我都会使用“user_notifications”。此外,在截屏评论中,belongs_to 文章,而在我的应用程序 user_notifications belongs_to 用户中,我将“文章”一词替换为“当前用户”。我能够成功设置 user_notifications,除了最新的通知出现在底部。我通过在 show.html.erb 文件中向 user_notifications 添加一个 .order 来解决这个问题(见下文)。问题是,由于 javascript 告诉它使用 'id > params[:after]' 轮询所有 user_notifications(请参阅下面控制器中的 index 操作),因此它会重新附加具有更高 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()

显示.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()

用户通知控制器:

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

0 回答 0