Я думаю, что следующие шаги решили проблему!
В настройках сайта я установил категорию (31) как отслеживаемую по умолчанию, ретроспективно.
Проверка:
CategoryUser.where(category_id: 31).pluck(:user_id, :notification_level)
У большинства пользователей notification_level для моей категории 31 равен 3. ![]()
Теперь есть два фактора, которые мешают этому изменению иметь 100%-ный эффект:
- Глобальные настройки электронной почты пользователя.
- Настройки уведомлений пользователя для каждой темы в категории (31).
Следующие команды изменят личные настройки ваших пользователей. Не вступайте в конфликт.
Во-первых, чтобы «возобновить» рассылку писем пользователям, необходимо установить их email_level в значение 1 (т. е. «когда в офлайне») или 2 («всегда»):
UserOption.update_all(email_level: 1)
Проверка:
UserOption.group(:email_level).count
Я получаю что-то вроде => {1=>X}, где X — количество пользователей.
Во-вторых, notification_level для темы имеет приоритет над notification_level для категории (который был изменен в настройках сайта). Самый простой способ — убрать настройки уведомлений для тем. Для этого достаточно просто удалить записи по одной теме:
TopicUser.where(topic_id: <topic_id_nr>).destroy_all
Проверка:
TopicUser.where(topic_id: <topic_id_nr>).exists?
Получение результата вроде => [ ] означает, что у пользователей нет настроек для тем, и notification_level категории станет значением по умолчанию для всех.
Примечание: Странно, но у некоторых пользователей всё ещё не были установлены настройки уведомлений для категории (31) (т. е. отсутствовала запись в таблице category_user). Чтобы убедиться, что их notification_level установлен, необходимо создать запись со значением notification_level:
User.find_each do |user|
unless CategoryUser.exists?(user_id: user.id, category_id: 31)
CategoryUser.create!(user_id: user.id, category_id: 31, notification_level: 3)
end
end
Проверка:
CategoryUser.where(category_id: 31).pluck(:id, :notification_level)