ruby-on-rails – 未读通知计数
发布时间:2020-12-17 02:54:23 所属栏目:百科 来源:网络整理
导读:我使用 public_activity gem为用户创建通知列表.使用 this post作为参考我试图保持用户未读取的通知的计数.当用户点击查看他们拥有的通知时,我希望计数返回到零.上面问题的解决方案是创建一个类方法,如下所示: def self.unreadwhere(:read = false)end 然后
我使用
public_activity gem为用户创建通知列表.使用
this post作为参考我试图保持用户未读取的通知的计数.当用户点击查看他们拥有的通知时,我希望计数返回到零.上面问题的解决方案是创建一个类方法,如下所示:
def self.unread where(:read => false) end 然后把它放在视图中: user.notifications.unread.update_all(:read => true) 我的控制器看起来像这样: def notifications @activities = PublicActivity::Activity.order("created_at desc").where(recipient_id: current_user.id) end def self.unread where(:read => false) end 我的观点看起来像这样: <% @activities.each do |activity| %> <%= render_activity activity %> <% end %> 我的问题是我在哪里添加: .update_all(:read => true) 在视图中,我如何获得unread.count. 解决方法
这很容易.您只需进行控制器操作,并在用户查看其通知时通过ajax调用它.
对于示例的动摇,我们假设将如何使用此gem实现facebook通知. 我将添加2个控制器方法 def notifications @activities = PublicActivity::Activity.order("created_at desc").where(recipient_id: current_user.id) @notification_count = @activities.where(:read => false).count end def read_all_notification PublicActivity::Activity.where(recipient_id: current_user.id).update_all(:read => true) end 2条路线 get 'some_controller/notifications' post 'some_controller/read_all_notification' 根据render_activity呈现的内容以及我们想要进一步挂钩此功能的位置,我们可以通过ajax调用相应的操作.假设,我想挂钩这个功能,其some_id为id.所以,我会这样做的 $(document).on 'click','#some_id',(e)-> e.preventDefault() $.ajax '/some_controller/read_all_notification',type: "post" dataType: "json" beforeSend: (xhr) -> xhr.setRequestHeader "X-CSRF-Token",$("meta[name="csrf-token"]").attr("content") cache: false 那一切. 值得一提的是,render_activity也几乎没有其他选项,它提供了如何以及想要呈现的内容的完全灵活性. 阅读本https://github.com/pokonski/public_activity/blob/master/lib/public_activity/renderable.rb#L16-L143 此方法是render_activity方法的核心. 就这样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |