hyd504
1
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 のクローンサイトのいずれかを利用してください。
hyd504
4
残念ながら、Discourse の品質に匹敵するものは他に存在しないため、Discourse が唯一の選択肢です。実際、Discourse はそのユースケースに必要なほぼすべての機能を備えていますが、ホームページのソート機能だけが不足しています。過去にも同様の要望(ただし数は少ない)を見たことがありますので、これが将来多くの人のお役に立てるかもしれません。
「いいね!」 2
それはとてもお優しいお言葉ですね 
ただ、当社は会話における時系列ソートに厳密に従っており、スレッド機能はごく限定的です。Solved プラグインをご覧になってはいかがでしょうか?
「いいね!」 1
riking
(Kane York)
6
別の方法として、サイトのホームページを /top または /top/daily に設定することもできます。
「いいね!」 2
hyd504
7
ハハ、そう言えるのは、私のコミュニティから非常に良い反応を得ているからです。Reddit のクローンサイトなんて試す価値すらないですよ。
Solved プラグインがこの問題とどう関係するのか、よくわかりません。更新日時(bump date)に影響を与えるのでしょうか?
これにも問題があります。ユーザーを惹きつけておくためには、タイムラインを無限スクロールにする必要があります。私のユーザーの大半は、カテゴリに移動する前に離脱してしまうでしょう。
次にやるべきことは、dev 環境で実験し、bumped_at をオーバーライドした際にどのような問題が発生するかを確認することです。それらの問題を受け入れられるトレードオフかどうかを見極めます。まだコードは見ていませんが、最終訪問マーカーが暴れるようなので、それを抑制する必要があるでしょう。また、「新規または更新されたトピック」も壊れてしまうと思うので、それにもオーバーライドや抑制が必要かもしれません。
もし他の人も興味があれば、このスレッドで私の経験を共有します。他に考えられる問題があれば、すぐに思いつくものを教えてください。
「いいね!」 1