использование gem непрочитано с public_activity - PullRequest
5 голосов
/ 02 марта 2012

Я не уверен, что это возможно, но, учитывая способ, которым вы можете внедрить метод в модули, есть ли способ вставить "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

Однако я заметил в записи (таблица БД read_marks), когда я делаю

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

что ключ readable_type установлен на «PublicActivity :: Activity» вместо «Activity»

Это потому, что в непрочитанном камне используется

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

этот base_class дает класс, ближайший к ActiveRecord :: Base Какой будет лучший вариант?

1) каким-то образом внедрить 'acts_as_readable: on =>: updated_at' непосредственно в PublicActivity :: Activity

2) раскройте PublicActivity и проверьте, установлен ли непрочитанный гем, если это так, добавьте строку actions_as ...

3) раскошелитесь с непрочитанным гемом и ... не уверены, что я буду здесь делать, первое, что приходит в голову, - проверить, начинается ли класс с PublicActivity!

И просто для определения проблемы: поскольку читаемый тип записи (таблица БД read_marks) имеет вид PublicActivity :: Activity , а не Activity , мой

Activity.unread_by(current_user).count

никогда не возвращает правильный счет. Использование

PublicActivity::Activity.unread...

произойдет сбой, так как '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

UPDATE

АХ! Это было поле readable_type, имеющее ограничение только 20, которое усекало мое имя класса. Теперь это работает после того, как я увеличил размер.

Ответы [ 3 ]

2 голосов
/ 25 апреля 2012

REKO

Не уверен, что вы нашли решение, но чтобы избавиться от ошибки (я использую 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 и вставил указанную выше строку в папку инициализатора. Теперь, когда ошибка исчезла при загрузке, но я все еще получаю ошибку отсутствующего шаблона? Надеюсь, это поможет!

1 голос
/ 08 октября 2013

Идея такова: всякий раз, когда пользователь видит свою страницу public_activity, создайте его пользовательскую активность в таблице PublicActivities.

В следующий раз, когда пользователь увидит свою страницу, сравните дату этой ("publicactivity.посетить ") активность со всеми новыми действиями и показать все непрочитанные новые действия

0 голосов
/ 07 июля 2015

Вы можете сосчитать все действия, принадлежащие текущему пользователю, используя это

<span class='badge'> 
    <%=  PublicActivity::Activity.order("created_at desc").where(owner_id: current_user.follower_ids , owner_type: "User").count %>
</span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...