Привет,
Я пытаюсь сбросить «категории по умолчанию для отслеживания» для всех пользователей, но безуспешно.
Хотя в разделе настроек кажется, что категории не выбраны, у пользователей в предпочтениях некоторые категории всё же выбраны.
Привет @ufukayyildiz
Удалось ли вам узнать, как действовать в этой ситуации? У меня тоже возникли трудности при попытке сделать то же самое. В итоге ничего не заработало вообще ^^ см. Members not receiving emails from Watched category (again)
Нет, ещё нет.
Я полагаю, что настройка спроектирована так, чтобы учитывать выбор пользователя. Таким образом, если пользователь вручную добавит категорию, она не будет перезаписана.
Возможно, вы сможете что-то сделать с помощью консоли Rails, но, на мой взгляд, лучший подход — обучить ваших пользователей. Что вы думаете? Или у вас есть конкретная ситуация, в которой необходимо изменить значение по умолчанию независимо от обстоятельств?
Спасибо за ваш ответ.
Я был бы очень рад, если бы появилась команда rails console для копирования предпочтений пользователей. Я полностью понимаю выбор дизайна, согласно которому предпочтения пользователей имеют приоритет над настройками сайта. Однако проблема в том, что сайты развиваются, и вместе с ними меняется их организация.
В нашем случае мы перешли от организации, где все объявления публиковались как новые темы: в результате на главной странице появилось огромное количество тем без обсуждений (всего одно сообщение). Я заметил, что начал изучать этот вопрос ещё в феврале 2023 года: Unlist or archive a post when it has no reply per category.
Поскольку эти объявления актуальны и содержат важные сроки, скрыть их с главной страницы было невозможно. Поэтому мы перешли к организации с 5 специальными темами (типы объявлений), где каждое новое сообщение является новым объявлением.[1] Поскольку эти сообщения важны, мы попробовали установить категорию как «следить», чтобы пользователи получали уведомления в реальном времени.
Это стало началом ситуации, которая привела к тому, что сейчас никто не получает ничего, кроме уведомлений user_mentioned и digest. Переключение было бы намного проще, если бы можно было просто сбросить все предпочтения пользователей до новых настроек по умолчанию сайта. Или, как ещё одна идея, скопировать предпочтения пользователей из виртуальной новой регистрации на всех остальных пользователей.[2]
Тем временем я сообщил пользователям, что системы иногда работают не так, как задумано, и что уведомления по электронной почте не будут приходить в течение неопределённого периода времени.
Снова здравствуйте. Я всё ещё занимаюсь этим вопросом, и в нашем случае сброс пользовательских настроек имеет смысл, поскольку структура сайта изменилась, что повлекло за собой изменение работы уведомлений по электронной почте.
Из Discourse AI мне был предложен следующий rails-команд:
UserOption.update_all(email_digests: true, email_level: 1, email_messages_level: 1)
Как вы думаете, это поможет достичь того, чего мы хотим?
Спасибо!
Я думаю, что следующие шаги решили проблему!
В настройках сайта я установил категорию (31) как отслеживаемую по умолчанию, ретроспективно.
Проверка:
CategoryUser.where(category_id: 31).pluck(:user_id, :notification_level)
У большинства пользователей notification_level для моей категории 31 равен 3. ![]()
Теперь есть два фактора, которые мешают этому изменению иметь 100%-ный эффект:
Следующие команды изменят личные настройки ваших пользователей. Не вступайте в конфликт.
Во-первых, чтобы «возобновить» рассылку писем пользователям, необходимо установить их 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)