Reimposta le impostazioni di visualizzazione delle categorie predefinite

Penso che i passaggi seguenti abbiano risolto il problema!

Nelle impostazioni del sito ho impostato la categoria (31) da osservare per impostazione predefinita, retroattivamente.
Verifica:

CategoryUser.where(category_id: 31).pluck(:user_id, :notification_level)

La maggior parte degli utenti ha un notification_level di 3 per la mia categoria 31. :+1:

Ora ci sono due cose che ostacolano l’effetto al 100% di questa modifica:

  1. Le preferenze email globali dell’utente.
  2. Le preferenze di notifica dell’utente per ogni argomento nella categoria (31).

:warning: Le righe seguenti modificheranno le impostazioni personali dei tuoi utenti. Non metterti nei guai.

Innanzitutto, per “riattivare” le email degli utenti, è necessario impostare il email_level degli utenti su 1 (cioè “quando assente”) o 2 (“sempre”):

UserOption.update_all(email_level: 1)

Verifica:

UserOption.group(:email_level).count

Ottengo qualcosa come => {1=>X} con X che è il numero di utenti.

In secondo luogo, il notification_level dell’argomento ha la priorità sul notification_level della categoria (che è stato modificato nelle impostazioni del sito). Il modo più semplice è eliminare le preferenze dell’argomento. Per farlo, basta eliminare le voci argomento per argomento:

TopicUser.where(topic_id: <nr_id_argomento>).destroy_all

Verifica:

TopicUser.where(topic_id: <nr_id_argomento>).exists?

Ottengo qualcosa come => [ ] che significa che nessun utente ha preferenze per l’argomento e il notification_level della categoria sarà quello predefinito per tutti gli utenti.


N.B.: In qualche modo, alcuni utenti non avevano ancora impostato preferenze di notifica per la categoria (31) (cioè nessuna voce nella tabella category_user). Per assicurarsi che il loro notification_level sia impostato, è necessario creare una voce con il valore per 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

Verifica:

CategoryUser.where(category_id: 31).pluck(:id, :notification_level)