Суммировать потомство, а затем упорядочивать по сумме - плохая практика.
Я бы посоветовал вам добавить столбец total_views:integer
в свой Topi c .rb и обновлять его всякий раз, когда изменяется сумма post.views.
Когда дочерний пост viewed
увеличивается значение, вы можете вызвать обратный вызов для автоматического обновления столбца total_views
.
Post.rb может иметь что-то вроде:
after_create do
topic.update_total_views
end
after_update do
topic.update_total_views
end
after_destroy do
topic.update_total_views
end
Topi c .rb:
def update_total_views
update_column :total_views, (posts.map(&:viewed).sum)
end
Чем в вашем контроллере вы можете позвонить Topic.all.order(total_views: :desc)