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