Продвижение пользователей до TL2 при вступлении в группу — ретроспективно?

Я изменил существующую группу и установил значение «Уровень доверия, автоматически предоставляемый участникам при их добавлении» на 2. Таким образом, все участники этой группы будут автоматически переведены на уровень доверия 2 при добавлении в группу:

Однако это не применяет изменения автоматически ко всем уже существующим участникам группы к уровню доверия 2 :confused:

Как можно принудительно выполнить это действие?

Или как можно автоматически повысить уровень доверия всех участников группы до TL2? :thinking:

:warning: Это решение продвинутое. Команда Rails может быть выполнена только при наличии SSH-доступа к вашему серверу, и её следует избегать, если вы не уверены в своих действиях. В любом случае всегда сначала создавайте резервную копию.


Привет, Ричи :slight_smile:

Вы можете использовать скрипт Rails, похожий на этот:

Это должно сработать из консоли Rails:

target_group = Group.find_by_name("test")
users = User.joins(:group_users).where(group_users:{group_id: target_group.id})
users.each do |u|
  u.trust_level = 2
  u.save
end

Спасибо @nathank за Delete all users not in a specific group - #2 by nathank :slight_smile:

Спасибо @Canapin

Я совсем не знаком с консолью Rails, но запустил то, что вы опубликовали здесь, и теперь она висит на END и мигает курсором передо мной:

Мне нужно как-то закоммитить это изменение? :thinking:

(это не повысило их до TL2)

Нет, это просто вывод, который не влияет на выполнение скрипта. Думаю, вы можете нажать q, чтобы выйти.

Также вы можете использовать это:

Это может быть связано с частью Group.find_by_name("test"). Не знаю, принимает ли она реальное имя группы или слаг. :person_shrugging:


Также я должен был упомянуть, что использование команд Rails довольно продвинуто, и перед выполнением подобных действий следует сделать резервную копию. Извините за это.

Хм, произошло что-то странное.

Если я посмотрю на пользователя, который был TL1 до запуска этого скрипта на Rails, я увижу, что теперь он TL2 (что отлично, большое спасибо!)

Но если я посмотрю на группу пользователей TL2, общее количество пользователей в группе не увеличилось :thinking:

Аналогично, если я поищу одного из пользователей, только что переведённых в TL2, он не появится в результатах поиска по группе TL2:

:thinking:

Также пользователь не получил значок TL2:

:thinking:

Группы обновляются в процессе выполнения задачи Sidekiq.

Задача называется EnsureDbConsistency и может быть запущена через Sidekiq, если вы знаете, как это сделать. Также можно подождать несколько часов — группы обновятся автоматически. :slight_smile:

Я нашёл решение здесь:

:slight_smile:

Отлично, спасибо!

Я буду терпеливо ждать, пока это разрешится само собой :blush:

Спасибо за ваше время @Canapin — и за ваше решение — вы сэкономили мне гору времени, сделав это вручную :scream:

Пожалуйста.

Я немного поспешил, предложив команду Rails без должного предупреждения, так как это может привести к проблемам, если мы точно не знаем, что делаем. Я добавлю более заметное предупреждение в свой пост :slight_smile:

Похоже, эта задача Rails понизила всех наших пользователей TL4 и TL3 до TL2 :thinking:

Надеюсь, задача EnsureDbConsistency автоматически исправит их всех за ночь :blush:

Да, пользователи TL3 будут снова повышены, если они по-прежнему соответствуют критериям.

Для TL4 потребуется ручное повышение.

Чтобы избежать этого, каждого пользователя необходимо оценивать по заявлению и повышать только в том случае, если он сейчас находится ниже уровня TL2.

Если ваши пользователи TL4 также состоят в группе, вы можете использовать её для массового повышения.

Отличная информация, спасибо @Stephen. Сейчас это сделаю :slight_smile:

Всё выглядит отлично этим утром :blush:

Ещё раз спасибо @Canapin и @Stephen :wave: