Sto bloccando un argomento tramite l’API (gem) e riesco a bloccarlo e sbloccarlo se questo è l’unico comando nella catena, ma quando creo un post nell’argomento in precedenza e il comando successivo è bloccarlo, il post viene creato, poi l’argomento viene bloccato, ma immediatamente dopo viene sbloccato!
È davvero strano. Se creo solo il post, o blocco solo l’argomento, funziona correttamente. Ma se provo a fare entrambe le cose, alla fine l’argomento viene sbloccato spontaneamente!
Per ora ho deciso di non bloccare l’argomento, ma ho pensato di pubblicare qui nel caso sia qualcosa che vale la pena investigare.
Lo blocchi immediatamente dopo aver creato un post nell’argomento? Se sì, prova ad aspettare un minuto, poi riprova a bloccarlo e vedi se rimane bloccato. Solo un’idea.
Ottima scoperta, lo esaminerò appena avrò la possibilità. Unire queste due chiamate API in un’unica richiesta non segue esattamente come viene fatto nell’interfaccia utente (non è possibile creare un nuovo argomento bloccato), quindi è probabile che quell’endpoint API non stia cercando il flag di blocco o che lo imposti di default su sbloccato durante la creazione dell’argomento.
Ho esaminato la questione oggi per vedere se fosse una modifica rapida, ma molte delle azioni che puoi applicare ai topic vengono eseguite al meglio dopo che il topic è stato creato. Un motivo è che dovremmo davvero utilizzare TopicStatusUpdater per chiudere il topic invece di aggiornarlo direttamente nel database, ma quando aggiorniamo lo stato durante la creazione del topic sembra che il topic venga chiuso prima che il primo post venga creato, causando questo comportamento strano:
Per ora dovrai effettuare due richieste API separate: una richiesta POST a /posts.json e, se questa ha successo, una richiesta PUT a /t/{id}/status.json.
Ah, capisco, ho frainteso esattamente cosa stavi facendo. Pensavo stessi cercando di creare un argomento e chiuderlo contemporaneamente. Tuttavia, la mia risposta precedente rimane valida quando si crea un post in un argomento esistente e lo si chiude nello stesso momento. Dovresti semplicemente utilizzare i due endpoint separati.
Ho appena testato il tuo codice in locale e funziona correttamente per me. Cosa non funziona? Presumo che il post venga creato, ma l’argomento non venga chiuso? Se è così, potresti usare puts e stampare il risultato di @client.change_topic_status(slug, topic_id, params)?
Come nota a margine, guardando il codice nella gemma API, non stiamo utilizzando affatto la variabile slug, quindi aggiornerò il codice per rimuoverla.