使用gem未读与public_activity

时间:2012-03-02 14:40:58

标签: 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

但是当我做

时,我在记录(DB table read_marks)中注意到了
Activity.mark_as_read! :all, :for => current_user

read_type键设置为'PublicActivity :: Activity'而不是'Activity'

这是因为Unread gem使用

user.read_marks.build(:readable_id => obj.id, :readable_type => self.base_class.name)

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

1)以某种方式注入'acts_as_readable:on =&gt; :updated_at'直接进入PublicActivity :: Activity

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

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

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

Activity.unread_by(current_user).count

永远不会返回正确的计数。使用

PublicActivity::Activity.unread...

会失败,因为'acts_as_readable:on =&gt; :updated_at'在Activity中,而不是PublicActivity :: Activity。

更新

我试图'猴子修补'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

更新

AH! read_type字段的限制只有20,这截断了我的类名。现在它增加了尺寸后就可以了。

3 个答案:

答案 0 :(得分:2)

REKO

不确定您是否找到了解决方案,但是要解决错误(我使用的是Ruby 1.9.3&amp; 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的文件,并将上面的行插入到初始化文件夹中。现在,这在加载时清除了错误,但我仍然得到一个丢失的模板错误?希望这有帮助!

答案 1 :(得分:1)

想法是:每当用户看到他的public_activity页面时,在PublicActivities表中创建他的custom activity

下次,当用户看到他的页面,然后将该日期(“publicactivity.visit”)活动与所有新活动进行比较,并显示所有未读的新活动

答案 2 :(得分:0)

您可以使用此

计算属于当前用户的所有活动
<span class='badge'> 
    <%=  PublicActivity::Activity.order("created_at desc").where(owner_id: current_user.follower_ids , owner_type: "User").count %>
</span>