サブトピックを作成しますか?

トピックを他のトピックのサブトピックにしたいと考えています。

例えば「トピック A」があるとします。トピック A のページに「サブトピックを作成」ボタンを配置し、ユーザーが新しいトピック「トピック B」を作成できるようにします。トピック B はトピック A の子トピックとなります。

ユーザーエクスペリエンスの観点からは、以下のような動作になります。

トピック A のページに「トピック A のすべての子トピックを表示」ボタンを配置し、これをクリックするとトピック A の子トピック(トピック B や他の子トピックなど)の一覧に遷移します。

これを実現する最適な方法はどのようなものでしょうか?(プラグインで実装する必要があると考えていますが、問題ありません。)

なお、サブトピックは1段階のみを想定しており、複数階層は必要ありません。

以下に、私が検討しているいくつかの可能性の詳細を示します。

カテゴリ(ただし、おそらく最良の方法ではないでしょう)

カテゴリは私が想定している機能と似た役割を果たしますが、サブトピックを持つトピックがある程度増えると重くなりすぎる可能性があります(親トピックごとに新しいカテゴリを設けるのはやりすぎに思えます)。

または

タグ

現時点で思いつく最善の方法はタグを使用することです。トピック A の「サブトピックを作成」ボタンをクリックすると新しいトピックが開き、プログラム的に「Topic-A」のような隠しタグを自動的に追加し、それがトピック A にリンクするようにします。そして「トピック A のすべてのサブトピックを表示」ボタンをクリックすると、「Topic-A」タグで検索を実行します。

これは非常にクリーンな方法ですが、タグの数が増えすぎる(基本的には主要なトピックごとに1つのタグが必要になり、結果として多数のタグが生まれる)という欠点があります。

または

トピックのカスタムフィールド

もう一つの可能性として、トピックのカスタムフィールドを作成し、そのトピックの子トピックのID配列を格納する方法を検討しました。これも機能しますが、コーディングがやや複雑になる可能性があります。

例えば、サブトピックが作成された後にのみ親トピックのカスタムフィールドを更新する必要があり、また、既存のタグ検索機能ではなく、親トピックのカスタムフィールド配列内のすべてのトピックを検索する新しい検索機能を実装する必要があります。

他に見落としている解決策はありますか?

重いコード作業なしで機能する別の解決策があると思います。

カスタムウィザードプラグインを使えば、1つの手順で複数のアクションを実行できます。そのため、この場合、ユーザーにサブトピックを入力してもらい、以下の処理を行うウィザードを使用します。

  • サブトピック用の新しいトピックを作成する
  • メイントピックにサブトピックへのリンクを含む返信を作成する

すべてのメイン投稿にカスタム CSS を適用することで(カテゴリやタグで選択できるように CSS クラスを追加できます)、返信の表示を思い通りのスタイルに変更できます。また、ウィザードを使って返信にパラメータを追加し、自動返信のみを選択できるようにする方法もあるかもしれません。

返信の解決策が気に入らない場合は、カスタムウィザードを使って作成されたサブトピックにタグを追加することも可能だと思います。

その考えは思い浮かんでいませんでした。ありがとうございます。私が欠けている重要な部分は、サブトピックからメイントピックへ戻るリンクを持つ何かです。例えば、サブトピックに関連付けられたタグ(「トピック-A」)などです。

ウィザードが送信時に、タグを作成しサブトピックとリンクさせるためにAPI呼び出しを行うと考えていますか?(ウィザードプラグインについては詳しくありません。)

また、ウィザードプラグインの限界の一つは、独自のページを開き、私のサイトの通常のヘッダーを持っていない点だと考えています。つまり、ウィザードを含むページはアプリの他の部分とはかなり異なる見た目になるため、この場合ユーザーにとって混乱を招く可能性があります。

サブトピックを1レベル追加できればと考えていました。これにより、ネストされた会話の山にならないようにインターフェースをクリーンに保ちつつ、1レベルのネスト/階層構造を実現できます。

以下は、私がどのように使用するかの例です。

  • エピソード/投稿/記事のトピックを作成し、それに対するリアクションに基づいてサブトピックを作成できるようにする。

  • 質問のトピックを作成し、それに対する回答のサブトピックを作成できるようにする(各ユーザーにつきサブトピックを1つに制限するオプションがあればボーナス)。

プラグインの作成や、現在のDiscourseの機能でこれを実現する方法について、何か進捗はありましたか?

トピックカスタムフィールドを使用してそれを行う方法しか見つかりませんでした。たとえば、サブトピックにはメイントピックに戻るリンクを持つカスタムフィールドを設定できます。その後、そのメイントピックをカスタムフィールドの値として持つすべてのトピックを検索できます。まだ完全に実装されたプラグインはありませんが、ここで言及したようなコードを使用して、開発中に基本的に動作させることができました。Retrieve Topics based on custom field? - #12 by JQ331

ああ、そうですね。「topic-parent」のようなトピックカスタムフィールドを作成すれば、多くの活用方法があると思います。共有していただいたリンクを詳しく見て、できればRubyも学んでいきたいと思います。ありがとうございます!