Я блокирую тему через API (gem), и могу её заблокировать и разблокировать, если это единственная команда в цепочке. Однако, если я сначала создаю пост в теме, а следующей командой идёт её блокировка, то пост создаётся, тема блокируется, но затем она немедленно разблокируется!
Это очень странно. Если я только создаю пост или только блокирую тему, всё работает нормально. Но если я пытаюсь сделать и то, и другое, в конце тема разблокируется сама собой!
Пока я решил просто не блокировать тему, но подумал, что стоит написать здесь, на случай если это стоит investigate.
Вы блокируете тему сразу после создания поста? Если да, попробуйте подождать минуту, а затем снова заблокировать её и посмотреть, останется ли она заблокированной. Просто мысль.
Хорошее замечание, я изучу это, как только появится возможность. Объединение этих двух вызовов API в один запрос не совсем соответствует тому, как это делается в интерфейсе (нельзя создать новую тему с заблокированным статусом), поэтому данный конечный пункт API, скорее всего, не ожидает флага заблокированности или по умолчанию устанавливает его в разблокированное состояние при создании темы.
Я сегодня немного изучил этот вопрос, чтобы понять, можно ли быстро внести изменения, но многие действия, которые можно применять к темам, лучше выполнять после того, как тема уже создана. Одна из причин в том, что нам действительно следует использовать TopicStatusUpdater для закрытия темы, а не обновлять её напрямую в базе данных. Однако при обновлении статуса во время создания темы она, похоже, закрывается до создания первого поста, что приводит к такому странному поведению:
На данный момент вам потребуется выполнить два отдельных API-запроса: POST-запрос к /posts.json, а затем, если он успешен, PUT-запрос к /t/{id}/status.json.
А, теперь понятно, я неправильно понял, что именно вы делаете. Я подумал, что вы пытаетесь создать тему и сразу же закрыть её. Однако мой предыдущий ответ остаётся в силе, когда речь идёт о создании сообщения в существующей теме и её последующем закрытии. Вам следует просто использовать два отдельных эндпоинта.
Я только что протестировал ваш код локально, и у меня всё работает. Что именно не работает? Я предполагаю, что пост создаётся, но тема просто не закрывается? Если так, пожалуйста, используйте puts и выведите результат @client.change_topic_status(slug, topic_id, params).
Кстати, глядя на код в gem-библиотеке api, мы вообще не используем переменную slug, поэтому я обновлю код, чтобы удалить её.