我正在 Discourse 上运营一个新闻/政治讨论论坛。我遇到的问题是,Discourse 默认的排序方式在我的使用场景下会导致完全混乱,因为话题的发布时间对我而言至关重要。对于像我这样的论坛,Reddit 风格的排序最为合理,但据我了解,目前没有直接的方法可以实现这一点。
我在想,是否可以通过“滥用”bumped_at 字段来实现 Reddit 风格的排序,例如执行以下操作:
def topic_hotness(created_at, like_count)
/**
此函数通过数学公式将 created_at 和 like_count
转换为 bumped_at 日期,其原理类似于 Reddit 使用的算法。
请将 bumped_at 视为一个截止日期:考虑到话题的创建时间和点赞数,
我们需要话题在此日期之前保持在前十的位置。
*/
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 设置为未来时间。大家有什么看法?