是否可以将gem Unread与gem公共活动一起使用



我目前正在使用gem"公共活动",在视图中,我过滤了一个用户活动,只向该用户显示适用于他们的活动,例如"John Smith对您的帖子发表了评论"。然而,我想添加通知,比如facebook或twitter,徽章显示一个数字,当你看到订阅源时,徽章就会消失。

我发现了一个名为Unread的gem,它看起来很理想,只是它需要将acts_as_readable :on => :created_at添加到您的模型中,而且由于我使用的是public_activity gem,所以无法访问该类来添加它。

是否可以将未读gem所需的代码注入PublicActivity:Activity类?

链接:

gem公共活动:https://github.com/pokonski/public_activity

宝石未读:https://github.com/ledermann/unread

对于将来可能发现这一点的任何人,我通过对自己的通知进行数据建模来实现一个完全不同的系统。我没有使用公共活动和未读,而是创建了一个名为通知的新模型。这有列:

    recipient:integer
    sender:integer
    post_id:integer
    type:string
    read:boolean

然后,每当我有用户评论或类似的东西时,我都会在控制器中建立一个新的通知,传递以下信息:

    recipient = @post.user.id
    sender = current_user.id
    post_id = @post.id
    type = "comment"    # like, or comment etc
    read = false        # read is false by default

在导航栏中,我简单地添加了一个徽章,根据应用程序控制器变量统计current_users未读通知。

    @unreadnotifications = current_user.notifications.where(read: false)
    <% if @unreadnotifications.count != 0 %>
        (<%= @unreadnotifications.count %>)
    <% end %>

然后,在通知控制器中,我让它对视图运行mark_as_read操作。然后将通知计数设置回0。

    before_action :mark_as_read
    def mark_as_read
        @unread = current_user.notifications.where(read: false)
        @unread.each do |unread|
            unread.update_attribute(:read, true)
        end
    end

实际上可以向PublicActivity::Class添加额外的内容,如下所示:

将这个名为public_activity.rb的文件添加到config/initializers中。

PublicActivity::Activity.class_eval do
  acts_as_readable :on => :created_at
  def self.policy_class
    ActivityPolicy
  end
end

我还为任何在公共活动中使用Pundit的人提供了一个片段,这样你就可以有一个activity_policy.rb策略文件。

注意:请务必使用最新版本的"公共活动",其中包括以下行:https://github.com/chaps-io/public_activity/blob/1-5-stable/lib/public_activity/orm/active_record/activity.rb#L9因为如果不设置base_class,Unread将使用错误的多态类名。

相关内容

  • 没有找到相关文章

最新更新