以下の手順で問題が解決したと思います!
サイト設定で、カテゴリ(31)をデフォルトで、遡って購読するように設定しました。
確認:
CategoryUser.where(category_id: 31).pluck(:user_id, :notification_level)
ほとんどのユーザーは、私のカテゴリ「31」に対して notification_level が 3 になっています。![]()
これで、この変更が100%効果を発揮するには、2つのことが障害となります。
- ユーザーのグローバルメール設定。
- カテゴリ(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: <トピック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)