# トピックアクションのレンチから保留中のオプションを作成する

**URL:** <https://meta.discourse.org/t/make-pending-option-from-topic-actions-wrench/178601>\
**Category:** Feature\
**Created:** [2021 年 2 月 5 日午後 9:37 UTC](https://meta.discourse.org/t/make-pending-option-from-topic-actions-wrench/178601 "2021-02-05T21:37:21Z")\
**Posts on this page:** 1\
**Showing post:** 14

<div class="post-metadata">

**Author:** ![Roman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roman/32/157504_2.png) [@Roman](https://meta.discourse.org/u/Roman)\
**Post date:** [2021 年 2 月 26 日午後 2:06 UTC](https://meta.discourse.org/t/make-pending-option-from-topic-actions-wrench/178601/14 "2021-02-26T14:06:00Z")

</div>

お待たせして申し訳ありません。この件についてかなり考えてみました。

投稿を保留（pending）状態にするということは、その投稿をハードデリートし、必要なデータをすべてレビュー対象（reviewable）の `payload` 属性に保存して再作成できるようにするということです。`dependent: :destroy` や `dependent: :delete_all` とタグ付けされたアソシエーションによって、この移行中にデータが失われるのではないかと懸念したため、この処理は数回書き直しを行いました。しかし、いくつかのテストを行った結果、安全に行えると考えています。

トピックに返信がない場合、または最初の投稿でない場合にこれを行うことは、低から中程度の労力で可能でしょう。投稿をキューに追加するロジックはすべて `NewPostManager#enqueue` メソッド内にありますので、これを別クラスに抽出して再利用する必要があります。承認後は常にトピックの末尾に保留中の投稿を追加するため、特定の位置に追加するにはもう少し作業が必要になります。

一方、返信があるトピックを保留状態に戻すことは、このアプローチではより複雑になるでしょう。レビュー対象としてシリアライズするのは少しやりすぎかもしれません。代わりに、トピックを一時的に非表示にするのはどうでしょうか？例えば、信頼されたユーザーによってスパムとしてフラグ付けされた場合に、すでにこの処理を行っています。

あるいは、常にフラグ付けして削除（または非表示）にするという方法もあり、それによってすべてが簡単になるかもしれません。ハードデリートして投稿をキューに追加する方が優れている理由を思いつきません。

---

_[View the full topic](https://meta.discourse.org/t/make-pending-option-from-topic-actions-wrench/178601)._
