1

我目前正在使用 gem 'Public Activity',并且在视图中我过滤了一个用户活动,以仅向该用户显示适用于他们的活动,例如“John Smith 对您的帖子发表评论”。但是,我想为此添加通知,例如 facebook 或 twitter,其中一个徽章会显示一个数字,当您看到提要时,徽章就会消失。

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

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

链接:

gem public_activity:https ://github.com/pokonski/public_activity

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

4

2 回答 2

5

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

    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
于 2015-03-28T14:48:24.760 回答
1

实际上可以添加额外的东西到PublicActivity::Class这样的:

将此文件添加public_activity.rbconfig/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设置,未读将使用错误的多态类名。

于 2017-06-23T00:48:26.923 回答