Estoy bloqueando un tema a través de la API (gem) y puedo bloquearlo y desbloquearlo si ese es el único comando en la cadena. Sin embargo, cuando creo una publicación en el tema antes y el siguiente comando es bloquearlo, se crea la publicación, luego se bloquea, pero inmediatamente se desbloquea.
Esto es realmente extraño. Si solo creo la publicación o solo bloqueo el tema, funciona bien. Pero si intento hacer ambas cosas, al final se desbloquea el tema por sí mismo.
Por ahora, he decidido no bloquear el tema, pero pensé en publicar aquí por si acaso es algo que valga la pena investigar.
¿Lo estás bloqueando inmediatamente después de crear una publicación en el tema? Si es así, intenta esperar un minuto y luego bloquearlo para ver si se mantiene bloqueado. Solo una idea.
Buen hallazgo, lo investigaré cuando tenga oportunidad. Combinar estas dos llamadas a la API en una sola solicitud no sigue estrictamente cómo se hace en la interfaz de usuario (no se puede crear un nuevo tema bloqueado), por lo que es probable que ese punto final de la API no esté buscando la bandera de bloqueo o que, por defecto, la establezca como desbloqueada al crear el tema.
He investigado esto un poco hoy solo para ver si sería un cambio rápido, pero muchas de las acciones que puedes aplicar a los temas se realizan mejor después de que el tema ya existe. Una razón es que realmente deberíamos usar TopicStatusUpdater para cerrar el tema en lugar de actualizarlo directamente en la base de datos, pero cuando actualizamos el estado durante la creación del tema, parece cerrar el tema antes de que se cree la primera publicación, lo que resulta en este comportamiento extraño:
Por ahora, necesitarás realizar dos solicitudes de API separadas: una solicitud POST a /posts.json y, si tiene éxito, una solicitud PUT a /t/{id}/status.json.
Ah, ya veo, malinterpreté exactamente lo que estabas haciendo. Pensé que intentabas crear un tema y cerrarlo al mismo tiempo. Sin embargo, mi respuesta anterior sigue siendo válida al crear una publicación en un tema existente y luego cerrarlo al mismo tiempo. Solo debes usar los dos endpoints por separado.
Acabo de probar tu código localmente y funciona perfectamente para mí. ¿Qué es lo que no funciona? Asumo que el post se está creando, pero el tema simplemente no se está cerrando. Si es así, ¿podrías usar puts y mostrar el resultado de @client.change_topic_status(slug, topic_id, params)?
Como nota adicional, al revisar el código en el gem de la API, vemos que no estamos usando la variable slug en absoluto, así que haré una actualización para eliminarla.