ウォッチ中のデフォルトカテゴリ設定をリセット

以下の手順で問題が解決したと思います!

サイト設定で、カテゴリ(31)をデフォルトで、遡って購読するように設定しました。
確認:

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

ほとんどのユーザーは、私のカテゴリ「31」に対して notification_level3 になっています。:+1:

これで、この変更が100%効果を発揮するには、2つのことが障害となります。

  1. ユーザーのグローバルメール設定。
  2. カテゴリ(31)の各トピックのユーザー通知設定。

:warning: 以下の行は、ユーザーの個人設定を変更します。争いにならないようにしてください。

まず、ユーザーのメールを「再アクティブ化」するために、ユーザーの 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: <トピックID番号>).destroy_all

確認:

TopicUser.where(topic_id: <トピックID番号>).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)