在rails控制器操作后立即更新记录?

时间:2013-09-12 00:21:45

标签: ruby-on-rails activerecord controller

我的应用有活动通知,每个都有一个标记'看到',我用它来检查用户是否看过它们。

我的控制器看起来像这样:

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

但是这些活动都是按照已经看到的方式加载的,即使在收集完成后更新了这些活动。我错过了什么? #noob

1 个答案:

答案 0 :(得分: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

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

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