Redditのようなソートを実現するためにbumped_atを(誤)利用する

Discourse でニュース・政治討論フォーラムを運営しています。現在、Discourse に標準搭載されているデフォルトのソート方式が、私のユースケースでは完全な混沌を招いてしまうという問題に直面しています。私のフォーラムではトピックの新旧が非常に重要であるため、Reddit 風のソート方式が最も適していると考えています。しかし、それを実現する明確な方法はないと理解しています。

そこで、bumped_at を(無理やり)利用して Reddit 風のソートを実現できるか疑問に思っています。具体的には以下のようなアプローチです:

def topic_hotness(created_at, like_count)
   /**
      この関数は、created_at と like_count を
      Reddit が使用している数式に似た数学的公式を用いて
      bumped_at 日付に変換します。bumped_at を、
      作成日時といいね数の観点から、トピックをトップ 10 に
      残す必要がある期限日とみなしてください。
   */
end

add_model_callback(Topic, :before_save) do
   self.bumped_at = topic_hotness(self.created_at, self.like_count)
end

このアプローチは機能するでしょうか?また、この方法によってどの機能が壊れる可能性があり、それに対処する必要があるでしょうか。Discourse のコードベースのどこかで、bumped_at が未来の日付である場合に例外がスローされるという記述を目にしました。使用する数式によっては、この方式により bumped_at が未来の日付になる可能性があります。ご意見をお聞かせください。

どなたかいますか?

スレッドを押し上げてしまい、申し訳ありません。

いいえ、Reddit が欲しいなら、世の中には無数にある Reddit のクローンサイトのいずれかを利用してください。

残念ながら、Discourse の品質に匹敵するものは他に存在しないため、Discourse が唯一の選択肢です。実際、Discourse はそのユースケースに必要なほぼすべての機能を備えていますが、ホームページのソート機能だけが不足しています。過去にも同様の要望(ただし数は少ない)を見たことがありますので、これが将来多くの人のお役に立てるかもしれません。

「いいね!」 2

それはとてもお優しいお言葉ですね :wink:

ただ、当社は会話における時系列ソートに厳密に従っており、スレッド機能はごく限定的です。Solved プラグインをご覧になってはいかがでしょうか?

「いいね!」 1

別の方法として、サイトのホームページを /top または /top/daily に設定することもできます。

「いいね!」 2

ハハ、そう言えるのは、私のコミュニティから非常に良い反応を得ているからです。Reddit のクローンサイトなんて試す価値すらないですよ。

Solved プラグインがこの問題とどう関係するのか、よくわかりません。更新日時(bump date)に影響を与えるのでしょうか?

これにも問題があります。ユーザーを惹きつけておくためには、タイムラインを無限スクロールにする必要があります。私のユーザーの大半は、カテゴリに移動する前に離脱してしまうでしょう。

次にやるべきことは、dev 環境で実験し、bumped_at をオーバーライドした際にどのような問題が発生するかを確認することです。それらの問題を受け入れられるトレードオフかどうかを見極めます。まだコードは見ていませんが、最終訪問マーカーが暴れるようなので、それを抑制する必要があるでしょう。また、「新規または更新されたトピック」も壊れてしまうと思うので、それにもオーバーライドや抑制が必要かもしれません。

もし他の人も興味があれば、このスレッドで私の経験を共有します。他に考えられる問題があれば、すぐに思いつくものを教えてください。

「いいね!」 1