Je verrouille un sujet via l’API (gem) et je parviens à le verrouiller et à le déverrouiller si c’est la seule commande dans la chaîne. Cependant, lorsque je crée un message dans le sujet au préalable et que la commande suivante consiste à le verrouiller, il crée le message, puis le verrouille, mais le déverrouille immédiatement après !
C’est vraiment étrange. Si je me contente de créer le message, ou de verrouiller le sujet, tout fonctionne correctement. Mais si j’essaie de faire les deux, le sujet se déverrouille à la fin de lui-même !
Pour l’instant, j’ai décidé de ne pas verrouiller le sujet, mais je pensais poster ici au cas où cela mériterait d’être investigué.
Verrouillez-vous immédiatement après avoir créé un message dans le sujet ? Si oui, essayez d’attendre une minute, puis tentez de le verrouiller à nouveau pour voir s’il reste verrouillé. Une simple suggestion.
Bonne trouvaille, je vais examiner cela dès que j’aurai un moment. Combiner ces deux appels API en une seule requête ne suit pas strictement la méthode utilisée dans l’interface utilisateur (on ne peut pas créer un nouveau sujet verrouillé), ce qui suggère que ce point de terminaison API ne recherche probablement pas le drapeau de verrouillage ou qu’il le définit par défaut à déverrouillé lors de la création du sujet.
J’ai examiné cela un peu aujourd’hui pour voir s’il s’agissait d’un changement rapide, mais la plupart des actions que vous pouvez appliquer aux sujets sont mieux exécutées une fois le sujet créé. L’une des raisons est que nous devrions vraiment utiliser TopicStatusUpdater pour fermer le sujet plutôt que de le mettre à jour directement dans la base de données, mais lorsque nous mettons à jour le statut lors de la création du sujet, il semble fermer le sujet avant que le premier message ne soit créé, ce qui entraîne ce comportement étrange :
Pour l’instant, vous devrez effectuer deux requêtes API distinctes. Une requête POST vers /posts.json, puis, si cela réussit, une requête PUT vers /t/{id}/status.json.
Ah, je vois, j’ai mal compris exactement ce que vous faisiez. Je pensiez que vous essayiez de créer un sujet et de le fermer en même temps. Cependant, ma réponse précédente reste valable pour la création d’un message dans un sujet existant, puis sa fermeture simultanée. Vous devriez simplement utiliser les deux points de terminaison séparés.
Je viens de tester votre code localement et tout fonctionne bien de mon côté. Qu’est-ce qui ne fonctionne pas ? Je suppose que le post est bien créé, mais que le sujet n’est tout simplement pas fermé ? Si c’est le cas, pourriez-vous utiliser puts et afficher le résultat de @client.change_topic_status(slug, topic_id, params) ?
En passant, en examinant le code du gem API, nous n’utilisons pas du tout la variable slug, donc je vais faire une mise à jour pour la supprimer.