我不确定这是可能的,但考虑到你可以将方法注入模块的方法,有没有办法将"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 的文件,并将上面的行插入到初始化程序文件夹中。现在加载时的错误已清除,但我仍然收到缺少模板的错误?希望这可以帮助!