あまり複雑にしたくありません。
このコードの一部を確認しました(@tshenry さん、リンクをありがとうございます)。それほど複雑にする必要はなさそうです。
現在のグループメンションはここ(78〜80 行目)でトリガーされています。expand_group_mentions() 関数は、グループメンションの通知を受け取るべきユーザーを生成するジェネレーターであり、SiteSetting.max_users_notified_per_group_mention のようなポリシーを尊重しています。
このロジックを置くのに最適な場所だと思われます。
create_notification 関数では、すでに同じタイプの通知を受け取っているユーザーに対しては通知を抑制しています。そのため、グループメンションを含む投稿を編集すると、新しいグループメンバーに対して通知がトリガーされます。実際にはグループの全ユーザーに対して通知が生成されますが、すでに通知を受け取っている人に対しては抑制されるのです。
私は同様のアプローチを提案します。つまり、expand_group_mentions() 関数を更新して、group_mentions テーブルにレコードが存在するグループを除外するようにします。
以下のようなイメージです(Ruby の構文に詳しくないため、ご容赦ください):
def expand_group_mentions(groups, post)
return unless post.user && groups
Group.mentionable(post.user, include_public: false).where(id: groups.map(&:id)).each do |group|
next if group.user_count >= SiteSetting.max_users_notified_per_group_mention
# すでにメンションされているグループをチェック
next if GroupMentions.where(group_id: group.id, post_id: post.id).length > 0
yield group, group.users
end
end
ただし、これでは JIT 警告については何も解決しません。
この問題の解決に協力したいと考えています。ただ迷惑になっているだけなら、お知らせください ![]()