AstonJ
(AstonJ)
1
API(gem)を使ってトピックをロックしていますが、チェーン内のコマンドがロックのみであればロックもアンロックも正常に動作します。しかし、事前にトピックに投稿を作成し、その次のコマンドとしてロックを指定すると、投稿が作成されロックされますが、その後すぐに自動的にアンロックされてしまいます。
これは非常に奇妙です。投稿のみを作成するか、トピックのみをロックする場合は問題なく動作します。しかし、両方を同時に実行しようとすると、トピックが最終的に自動的にアンロックされてしまいます。
現時点ではトピックのロックをしないことにしましたが、調査に値する問題かもしれないと思い、ここに投稿しました。
「いいね!」 3
JimPas
2
投稿を作成した直後にロックしていますか?もしそうなら、1 分ほど待ってからロックを試みて、ロックされた状態が維持されるか確認してみてください。ただのアイデアですが。
「いいね!」 1
blake
(Blake Erickson)
3
良い発見ですね。機会を見て調査します。これら 2 つの API 呼び出しを 1 つのリクエストに統合するのは、UI の動作(ロックされたトピックを作成できない)とは厳密には一致しないため、この API エンドポイントでは locked フラグを参照していないか、トピック作成時にデフォルトでロック解除状態に設定している可能性があります。
「いいね!」 3
blake
(Blake Erickson)
4
今日は少し調べてみましたが、トピックに適用できる多くのアクションは、トピックが存在した後に実行するのが最適です。その理由の一つは、トピックを直接データベースで更新するのではなく、TopicStatusUpdater を使ってトピックを閉じるべきだからです。しかし、トピック作成時にステータスを更新すると、最初の投稿が作成される前にトピックが閉じられてしまい、以下のような奇妙な動作が発生します:
現時点では、2 つの別々の API リクエストを行う必要があります。まず /posts.json に対して POST リクエストを送信し、それが成功した場合に、続けて /t/{id}/status.json に対して PUT リクエストを送信してください。
「いいね!」 2
AstonJ
(AstonJ)
5
こんにちは、Blakeさん。私が試そうとしていたトピックは既に存在しています 
私の手順は以下の通りです:
bot.create_post(topic_id, post_content)
bot.switch_to_master_bot!("system")
bot.lock_topic("", topic_id)
def create_post(topic_id, post_content)
@client.create_post(
topic_id: "#{topic_id}",
raw: "#{post_content}",
)
end
def lock_topic(slug, topic_id)
params = { status: 'closed', enabled: true }
@client.change_topic_status(slug, topic_id, params)
end
Discourse API Gemを使用しています。
上記が動作する(あるいはあなたにとっては動作している)と言っているのでしょうか?
「いいね!」 1
blake
(Blake Erickson)
6
ああ、わかりました。あなたが何をしようとしていたのか、私は完全に誤解していました。あなたがトピックを作成して同時にクローズしようとしていると思っていたのです。ただし、既存のトピックに投稿を作成し、それを同時にクローズする場合は、以前の返信がそのまま当てはまります。2 つの別々のエンドポイントを使用するべきです。
「いいね!」 3
AstonJ
(AstonJ)
7
API Gem は正しい/別のエンドポイントを使用していますか、Blake?(使用していると思っていたのですが?)
client.create_post および client.change_topic_status メソッドは API Gem の一部です 
「いいね!」 2
blake
(Blake Erickson)
8
はい、それらのメソッドは正しいエンドポイントを使用しています 
「いいね!」 3
blake
(Blake Erickson)
10
ローカル環境でコードをテストしましたが、私の環境では正常に動作しています。何が動作していないのでしょうか?投稿は作成されているが、トピックが閉じられていないと推測されます。もしそうであれば、puts を使用して @client.change_topic_status(slug, topic_id, params) の結果を出力していただけますか?
余談ですが、api gem のコードを確認したところ、slug 変数は一切使用されていないため、これを削除する更新を行います。
「いいね!」 2