Planeo convertir una serie de temas en mensajes grupales para depreciar algunas categorías que apenas se usan. No podemos hacer eso a través de la interfaz de usuario (solo uno por uno), ni he encontrado una forma masiva de hacerlo.
Hasta donde puedo ver, esto debería funcionar a través de la consola:
Identificar los temas por su categoría
Cambiar topic.archetype a private_message
Cambiar topic.subtype a 'user_to_user'
Hacer que topic.category sea Null
En topic_groups (o quizás topic_allowed_groups), agregar una línea con el group_id y topic_id relevantes
¿Tiene sentido este enfoque? Necesito averiguar la diferencia entre esas tablas de temas/grupos primero, por supuesto. ¡Y hacerlo en un entorno de pruebas para empezar!
¡Gracias Jay! Eso sería bueno y rápido para la primera mitad. Sin embargo, también tengo que asegurarme de que terminen como Group PMs.
¿Alguna idea de qué tengo que hacer con las tablas topic_groups / topic_allowed_groups? No creo que pueda salirme con la mía con un update_all para ellas.
Desde entonces (¡claramente tomó un tiempo!) he encontrado dos maneras de lograr esto. Puedes hacerlo a través de la interfaz de usuario (UI), lo que funciona bien para Categorías pequeñas (y grupos pequeños). Requiere algo de cuidado para evitar enviar notificaciones inútiles mientras lo haces, pero es muy factible.
Alternativamente, puedes usar la Consola de Rails (asumiendo que te autoalojas), que es más rápida y mucho más potente.
Desde la UI
Elimina a los otros miembros del grupo del Grupo (pero conserva una lista de nombres de usuario/correos electrónicos para poder volver a añadirlos fácilmente). Esto evitará que sean notificados.
Recorre cada tema en la Categoría, convirtiéndolo en un Mensaje Privado (PM) usando el menú de la llave inglesa de administrador
Encuentro que es más fácil hacer esto abriendo cada tema en su propia pestaña y luego moviéndome entre ellos uno por uno
Añade el Grupo a cada uno de los Temas (ahora PMs)
Vuelve a añadir los miembros del Grupo al grupo
Ordena/elimina todas las ‘publicaciones pequeñas’ en cada Mensaje de Grupo según sea necesario
En la Consola de Rails
Accede a la consola entrando al contenedor y luego llamando a la consola:
./launcher enter app
rails c
Establece la Categoría y el Grupo, y luego copia el siguiente script en la consola:
category_id = =CategoryID=
group_name = '=GroupName='
group = Group.find_by('lower(name) = ?', group_name.downcase)
about_id = Category.find(category_id).topic_id
topic_ids = Topic.where(category_id: category_id).where.not(id: about_id).pluck(:id)
Topic.where(id: topic_ids).find_each do |topic|
topic.archetype = Archetype.private_message
topic.category_id = nil
topic.subtype = 'user_to_user'
topic.save!
TopicAllowedGroup.find_or_create_by!(topic_id: topic.id, group_id: group.id)
Post.where(topic_id: topic.id).pluck(:user_id).uniq.each do |uid|
TopicAllowedUser.find_or_create_by!(topic_id: topic.id, user_id: uid)
end
end
Esto no notifica a los usuarios en absoluto, y conserva muy bien a los usuarios que participan en las publicaciones (por si acaso no están en el Grupo)