使用gem未读与public_activity

And*_*ank 5 ruby-on-rails

我不确定这是可能的,但考虑到你可以将方法注入模块的方法,有没有办法将"acts_as_readable:on =>:updated_at"注入PublicActivity :: Activity?

问题是:我希望未读也跟踪用户尚未看到的新活动,所以我首先尝试这种方式.

class Activity < PublicActivity::Activity
  acts_as_readable :on => :updated_at
end

class User < ActiveRecord::Base
  acts_as_reader
end
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我在记录(DB table read_marks)中注意到了

Activity.mark_as_read! :all, :for => current_user
Run Code Online (Sandbox Code Playgroud)

将readable_type键设置为'PublicActivity :: Activity'而不是'Activity'

这是因为Unread gem使用

user.read_marks.build(:readable_id => obj.id, :readable_type => self.base_class.name)
Run Code Online (Sandbox Code Playgroud)

base_class给出了最接近ActiveRecord :: Base的类什么是最好的选择?

1)以某种方式将'acts_as_readable:on =>:updated_at'直接注入PublicActivity :: Activity

2)fork PublicActivity并检查是否安装了Unread gem,如果是,则添加'acts_as ...'行

3)分叉Unread gem并且...不确定我会在这里做什么,想到的第一个丑陋的事情是检查一个类是否以PublicActivity开头!

而且只是为了定义问题:由于记录的(DB表read_marks)可读类型是PublicActivity :: Activity而不是Activity,我的

Activity.unread_by(current_user).count
Run Code Online (Sandbox Code Playgroud)

永远不会返回正确的计数.运用

PublicActivity::Activity.unread...
Run Code Online (Sandbox Code Playgroud)

因为'acts_as_readable:on =>:updated_at'在Activity而不是PublicActivity :: Activity中会失败.

UPDATE

我试图'猴子补丁'Public_Activity插件,但现在我更加困惑为什么它失败了,它一定是我正在做的蠢事.我添加了以下文件.然而,readable_type仍然是PublicActivity :: Activity,我的计数在我做之后仍然相同

PublicActivity::Activity.mark_as_read! :all, :for => current_user


# config/initializers/activity_unread.rb
PublicActivity::Activity.module_eval do

  acts_as_readable :on => :updated_at

end
Run Code Online (Sandbox Code Playgroud)

UPDATE

啊!read_type字段的限制只有20,这截断了我的类名.现在它在我增加尺寸后起作用了.

小智 2

雷科

不确定您是否找到了解决方案,但为了消除错误(我使用的是 Ruby 1.9.3 和 Rails 3.2),请进行更改

PublicActivity::Activity.template = YAML.load_file("#{RAILS_ROOT}/config/pba.yml")

PublicActivity::Activity.template = YAML.load_file("#{Rails.root}/config/pba.yml")

我创建了一个名为 pba_setup 的文件,并将上面的行插入到初始化程序文件夹中。现在加载时的错误已清除,但我仍然收到缺少模板的错误?希望这可以帮助!