0

我的应用程序有活动通知,每个都有一个“已看到”标志,我用它来检查用户是否查看过它们。

我的控制器如下所示:

def index
  @unseen_activities = current_user.notifications.unseen.order(:updated_at => :desc)
  @seen_activities = current_user.notifications.seen.order(:updated_at => :desc)

  # mark them as viewed
  current_user.notifications.update_all(:seen => true)
end

但是所有活动都已加载,即使在收集后更新也是如此。我错过了什么?#小白

4

1 回答 1

2

尝试将标记放在after_action回调中:

after_action :mark_as_seen

def index
  @unseen_activities = current_user.notifications.unseen.order(:updated_at => :desc)
  @seen_activities = current_user.notifications.seen.order(:updated_at => :desc)
end

private

def mark_as_seen
  current_user.notifications.update_all(:seen => true)
end

如果这不起作用,请尝试在获取通知和更新状态之间放置一个显式的渲染语句。

如果这也不起作用,则可以将它们标记为在后台作业中看到,例如 Resque 或 Sidekiq。

于 2013-09-12T00:29:30.527 回答