Editing posts cause notification

Я не хочу делать ничего слишком сложного.

Я просмотрел часть кода для этого (спасибо @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.

Пытаюсь помочь решить эту задачу, дайте знать, если я просто надоедаю… :slight_smile: