Acho que os passos abaixo resolveram o problema!
Nas configurações do site, defini a categoria (31) para ser observada por padrão, retroativamente.
Verificar:
CategoryUser.where(category_id: 31).pluck(:user_id, :notification_level)
A maioria dos usuários tem um notification_level de 3 para minha categoria 31. ![]()
Agora há duas coisas no caminho para que esta mudança tenha um efeito de 100%:
- As preferências globais de e-mail do usuário.
- As preferências de notificação do usuário para cada tópico na categoria (31).
As linhas a seguir modificarão as configurações pessoais dos seus usuários. Não entre em uma briga.
Primeiro, para “reativar” os e-mails dos usuários, é preciso definir o email_level dos usuários como 1 (ou seja, “quando ausente”) ou 2 (“sempre”):
UserOption.update_all(email_level: 1)
Verificar:
UserOption.group(:email_level).count
Eu obtenho algo como => {1=>X} com X sendo o número de usuários.
Segundo, o notification_level do tópico tem prioridade sobre o notification_level da categoria (que foi modificado nas configurações do site). A maneira mais fácil é remover as preferências do tópico do caminho. Para fazer isso, basta excluir as entradas tópico por tópico:
TopicUser.where(topic_id: <nr_do_tópico>).destroy_all
Verificar:
TopicUser.where(topic_id: <nr_do_tópico>).exists?
Obtendo algo como => [ ] o que significa que nenhum usuário tem preferências de tópico e o notification_level da categoria será o padrão para todos os usuários.
N.B.: De alguma forma, alguns usuários ainda não tinham preferências de notificação para a categoria (31) definidas (ou seja, nenhuma entrada na tabela category_user). Para garantir que seu notification_level esteja definido, é preciso criar uma entrada com o valor para 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
Verificar:
CategoryUser.where(category_id: 31).pluck(:id, :notification_level)