2012-03-02 3 views
5

Я не уверен, что это возможно, но с учетом того, как вы можете внедрить метод в модули, есть ли способ вставить «act_as_readable: on =>: update_at» в PublicActivity :: Activity?с использованием gem непрочитанных с public_activity

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

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

class User < ActiveRecord::Base 
    acts_as_reader 
end 

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

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

что ключ readable_type установлен в 'PublicActivity :: деятельности' вместо 'активность'

Это связано с тем, что Непрочитанный драгоценный камень использует

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

что base_class дает класс закрытым est в ActiveRecord :: Base Какой был бы лучший вариант?

1) вводят как-то 'acts_as_readable: на =>: updated_at' непосредственно в PublicActivity :: Деятельность

2) вилки PublicActivity и проверьте, установлен ли непрочитанная драгоценный камень, если так добавить строку «acts_as ... '

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

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

Activity.unread_by(current_user).count 

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

PublicActivity::Activity.unread... 

потерпит неудачу с 'acts_as_readable: на =>: updated_at' в активность и не PublicActivity :: деятельности.

UPDATE

Я попытался «обезьяньим пластырь» в Public_Activity плагин, но теперь я еще больше запутались, почему это не удается, он должен быть чем-то тупое, что я делаю. Я добавил следующий файл. Однако readable_type еще PublicActivity :: активность и мой счетчик остается неизменным после того, как я

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

AH! Это поле readable_type имело ограничение только 20, которое усекало мое имя класса. Теперь он работает после того, как я увеличил размер.

+0

описание public_activity говорит поместите это в файл и ссылаться на него через Rails initializer.WHich файл вы должны поместить PublicActivity :: Activity.template = YAML.load_file ("# {} RAILS_ROOT /config/pba.yml") ? Я попытался сделать это в application.rb, environment.rb .. все перестановки .. Я только получаю Шаблон не определен! Пожалуйста, помогите мне! благодаря! – gkolan

+0

Как вы исправили поле readable_type, имеющее ограничение только 20? То есть, как вы увеличили его размер? –

+0

http://stackoverflow.com/questions/15194261/how-can-i-increase-a-field-in-a-rails-gem/15194299#15194299 получил это –

ответ

2

REKO

Не уверен, что если вы нашли решение, но избавиться от ошибки (я использую Ruby, Rails 1.9.3 & 3.2) изменения

PublicActivity :: Activity.template = YAML. LOAD_FILE ("# {RAILS_ROOT}/конфигурации/РВА.YML ")

к

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

Я создал файл с именем pba_setup и вставить указанная выше строка в папке инициализатора.Теперь, когда была устранена ошибка при загрузке, но у меня все еще есть ошибка в шаблоне? Надеюсь, это поможет!

1

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

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

+0

Проблема с этим решением заключается в том, что кто-то может использовать задачи cron для очистки таблицы общих действий для удаления –

0

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

<span class='badge'> 
    <%= PublicActivity::Activity.order("created_at desc").where(owner_id: current_user.follower_ids , owner_type: "User").count %> 
</span> 
Смежные вопросы