Вы можете делать глупую сортировку, считая комментарии для каждого микросообщения, но это не очень хорошая идея. Потому что каждый раз, когда ваше действие индекса вызывается, rails будет выполнять N + 1 запросов к базе данных, где N - количество микросообщений.
Лучшее решение здесь - использовать функцию Rails counter_cache. Это отдельный столбец в вашей таблице базы данных микросообщений, где хранится количество комментариев. Кроме того, он обновляется автоматически каждый раз, когда вы создаете новый или удаляете комментарий.
Во-первых, вам нужно добавить столбец в вашу базу данных. Для этого создайте миграцию примерно так:
add_column :microposts, :comments_count, :integer, :default => 0, :null => false
После этого измените код в вашей модели комментариев на что-то вроде этого:
belongs_to :micropost, :counter_cache => true
После всех этих изменений ваш столбец comments_count в микросообщении будет увеличиваться при каждом создании нового комментария и уменьшаться при каждом удалении комментария. Кроме того, вы можете сортировать микросообщения по значению этого столбца, например так:
@microposts = Micropost.order('comments_count ASC').all