我的应用有活动通知,每个都有一个标记'看到',我用它来检查用户是否看过它们。
我的控制器看起来像这样:
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
答案 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。