ダイジェストに除外カテゴリを含める

「不適切」カテゴリがあり、モデレーターはフラグが立てられた投稿をここに移動させることができます。これにより、公開フォーラムには不適切な内容でも、議論を続けることが可能です。当然ながら、このカテゴリは要約メールには含めたくありません。そのため、サイト設定で除外(抑制)されていました。

Screenshot from 2021-09-12 07-39-34

しかし、最近の要約にこのカテゴリからのトピックが誤って含まれていました。設定で一度選択を外し、再度選択すると、ログに変更が記録されていることがわかりました。

14 は「不適切」カテゴリの ID です。Previous カテゴリの 2(おそらく「サイトフィードバック」)はかなり以前に削除されたはずですが、どうやら除外カテゴリのリストにはまだ含まれていたようです。これが、リストが意図通りに機能しなかったバグの原因だったのでしょうか?

「いいね!」 3

サマリープレビューを確認しましたが、カテゴリはまだ含まれています。

実際、どのカテゴリを選んでも、非表示にする機能は機能しません。

はい、ローカルの開発環境で試したところ、同じ現象が発生していることが確認できました。問題は、こちらのロジックにあると思われます:

この行を topics = topics.where("topics.category_id NOT IN (?)", remove_category_ids) に変更すると、digest_suppress_categories 設定に追加されたカテゴリに関する問題は解決するようですが、ミュートされたカテゴリを処理するためのロジックを追加する必要があります。以下のような実装が考えられます:

topics = topics.where("topics.category_id NOT IN (?)", remove_category_ids).where("topic_users.notification_level != (?)", TopicUser.notification_levels[:muted])
「いいね!」 3

問題の原因は、対象のユーザーがすでにそのトピックにアクセスしており、そのユーザーに対して「TopicUser」モデルのレコードが作成されていることだと思います。そのため、ミュート状態かどうかを確認する上記の条件をそのトピックが通過してしまいます。この場合、以下のプルリクエストでこの問題が修正されるはずです。

「いいね!」 3