Использование bumped_at для сортировки в стиле Reddit

Я запускаю форум для новостных и политических дискуссий на платформе Discourse. Проблема, с которой я столкнулся, заключается в том, что сортировка по умолчанию, предусмотренная в Discourse, приводит к полному хаосу в моем случае, поскольку возраст темы имеет огромное значение. Для форума вроде моего сортировка в стиле Reddit кажется наиболее логичной, однако, насколько я понимаю, нет простого способа её реализовать.

Меня интересует, возможно ли (зло)использовать поле bumped_at для достижения сортировки в стиле Reddit, сделав что-то вроде:

def topic_hotness(created_at, like_count)
   /**
      Эта функция преобразует created_at и like_count
      в дату bumped_at, используя математическую формулу,
      аналогичную той, что используется в Reddit. Представьте 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 выполняет почти все необходимые функции для этого сценария использования; не хватает лишь сортировки на главной странице. Я видел подобные запросы в прошлом (хотя их было немного), поэтому, возможно, это поможет большему числу людей в будущем.

Ну, это очень мило с вашей стороны сказать :wink:

Но мы строго привержены хронологической сортировке в обсуждениях и используем лишь тонкую оболочку ветвления. Возможно, стоит посмотреть на плагин Solved?

Один из вариантов — установить главную страницу вашего сайта как /top или /top/daily.

Ха-ха. Я могу так сказать, потому что получаю очень хороший отклик от моего сообщества. Клоны Reddit, которые существуют, даже не стоят того, чтобы пытаться.

Я не уверен, что понимаю, как плагин Solved связан с этой проблемой. Влияет ли он на дату поднятия темы?

У этого тоже есть свои проблемы: лента должна быть с бесконечной прокруткой, чтобы удерживать пользователя. Большинство моих пользователей уйдут, вместо того чтобы переходить в категории.

Думаю, следующим шагом я проведу эксперименты в среде разработки, чтобы посмотреть, с какими проблемами столкнусь, если переопределю поле bumped_at, и решу, готовы ли я принять их как компромиссы. Я ещё не изучал код, но кажется, что маркер последнего посещения начнёт вести себя непредсказуемо, поэтому мне придётся его подавить. Кроме того, раздел «Новые или обновлённые темы», скорее всего, будет испорчен, так что, возможно, потребуется также его переопределение или подавление.

Я поделюсь своим опытом в этой теме, на случай, если кому-то ещё это интересно. Дайте знать, если вы можете придумать какие-либо другие проблемы, которые это может вызвать, просто так, сходу.