¿Promover usuarios a TL2 al unirse a un grupo - retroactivamente?

He modificado un grupo existente y he establecido el valor de Nivel de confianza que se otorga automáticamente a los miembros cuando se agregan en 2, por lo que todos los miembros de este grupo serán promovidos al Nivel de confianza 2 cuando se agreguen al grupo:

Sin embargo, no agrega retroactivamente a todos los miembros existentes al Nivel de confianza 2 :confused:

¿Cómo puedo forzar que esto ocurra?

¿O cómo puedo mejorar retroactivamente a todos los miembros del grupo hasta el Nivel 2? :thinking:

3 Me gusta

:warning: Esta solución es avanzada. Los comandos de Rails solo se pueden ejecutar si tiene acceso SSH a su servidor y debe evitarse si no está seguro de lo que está haciendo. En cualquier caso, siempre haga una copia de seguridad primero.


Hola Richie :slight_smile:

Puede usar un script de rails similar a este:

Eso debería funcionar desde la consola de 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

Gracias @nathank por Delete all users not in a specific group - #2 by nathank :slight_smile:

3 Me gusta

Gracias @Canapin

No estoy familiarizado con la consola de Rails en absoluto, pero ejecuté lo que publicaste aquí y ahora está en END y me muestra un cursor parpadeante:

¿Necesito confirmar este cambio de alguna manera? :thinking:

(no los ha promovido a TL2)

1 me gusta

No, esa es solo una salida que no tiene ningún efecto en la ejecución del script. Creo que puedes presionar q para salir.

También puedes usar esto:

Puede estar relacionado con la parte Group.find_by_name("test"). No sé si acepta el nombre real del grupo o el slug. :person_shrugging:


Además, debería haber mencionado que usar comandos de rails es bastante avanzado y se debe hacer una copia de seguridad antes de hacer este tipo de cosas. Me disculpo por eso.

2 Me gusta

Hmmm, ha ocurrido algo extraño.

Si miro a un usuario que era TL1 antes de ejecutar este script de Rails, veo que ahora es TL2 (lo cual es genial, ¡muchas gracias!)

Pero, si miro el grupo de usuarios TL2, el número total de usuarios en el grupo no ha aumentado :thinking:

Del mismo modo, si busco a uno de los usuarios que acaba de ser actualizado a TL2, no aparece en los resultados de búsqueda del grupo TL2:

:thinking:

Además, el usuario no ha obtenido la insignia TL2:

:thinking:

1 me gusta

Los grupos se actualizan durante un trabajo de Sidekiq.

La tarea es EnsureDbConsistency y se puede activar a través de Sidekiq, si sabes cómo hacerlo. También puedes esperar unas horas; los grupos se actualizarán automáticamente. :slight_smile:

Lo descubrí aquí:

:slight_smile:

3 Me gusta

¡Genial, gracias!

Esperaré pacientemente a que se resuelva solo :blush:

Gracias por tu tiempo @Canapin - y por tu solución - me has ahorrado una montaña de tiempo al hacer esto manualmente :scream:

1 me gusta

De nada.

Solo fui un poco rápido al sugerir un comando de rails sin la advertencia adecuada, ya que puede salir mal si no sabemos realmente lo que estamos haciendo. Añadiré una advertencia más visible a mi publicación :slight_smile:

3 Me gusta

Esta tarea de Rails parece haber degradado a todos nuestros usuarios TL4 y TL3 a TL2 :thinking:

Espero que la tarea EnsureDbConsistency los corrija automáticamente durante la noche :blush:

1 me gusta

Lo hará, los usuarios TL3 serán promocionados asumiendo que aún cumplen los criterios.

TL4 deberá ser promocionado manualmente.

Para evitar esto, cada usuario debe ser evaluado según la declaración y solo ser promocionado si actualmente está por debajo de TL2.

Si sus usuarios TL4 también son miembros de un grupo, podría usar eso para promocionarlos en masa.

3 Me gusta

Gran información, gracias @Stephen Lo haré ahora :slight_smile:

3 Me gusta

Todo parece perfecto esta mañana :blush:

Gracias de nuevo @Canapin y @Stephen :wave:

3 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.