1) Есть несколько способов сделать это, самым простым будет счетчик кеша, вы сделаете так, чтобы я создал столбец для поддержания количества и рельсов, чтобы счет продолжался. столбец в этом случае будет comments_count
songs = Song.all(:order => "comments_count DESC")
ИЛИ вы можете сделать шикарный запрос:
songs = Song.all(:joins => "LEFT JOIN comments ON songs.id = comments.song_id",
:select => "song.name, count(*)",
:group => "song.name",
:order => "count(*) DESC")
несколько предостережений со вторым методом, все, что вы хотите выбрать в песнях, вам нужно будет включить в группу по утверждению. Если вам нужно только тянуть песни с комментариями, то вы можете:
songs = Song.all(:joins => :comments,
:select => "song.name, count(*)",
:group => "song.name",
:order => "count(*) DESC")
Что выглядит лучше, но поскольку это внутреннее соединение, вы не получите песни без комментариев
2) просто включить / объединить
songs = Song.all(:include => :comments, :order => "comment.created_at"
Надеюсь, это поможет!