1) Il y a deux façons de le faire, le plus simple serait contre le cache, vous le faites ma création d'une colonne pour maintenir le nombre et les rails permettra de garder le compte à la vitesse. la colonne dans ce cas serait comments_count
songs = Song.all(:order => "comments_count DESC")
ou vous pouvez faire une requête très chic:
songs = Song.all(:joins => "LEFT JOIN comments ON songs.id = comments.song_id",
:select => "song.name, count(*)",
:group => "song.name",
:order => "count(*) DESC")
quelques mises en garde avec la deuxième méthode, tout ce que vous voulez sélectionner dans les chansons que vous aurez besoin de inclure dans le groupe par déclaration. Si vous avez seulement besoin de tirer des chansons avec des commentaires, vous pouvez:
songs = Song.all(:joins => :comments,
:select => "song.name, count(*)",
:group => "song.name",
:order => "count(*) DESC")
Ce qui semble plus agréable mais parce qu'il fait un intérieur vous joindre ne serait pas obtenir des chansons qui avaient aucun commentaire
2) juste un Include/joint
songs = Song.all(:include => :comments, :order => "comment.created_at"
J'espère que cela aide!
Je peux laisser le 'self' dans le rappel, non? –
Oui, vous pouvez si vous voulez. ça va juste grimper la portée et frapper ce qu'il veut. J'ai tendance à ne pas partir parce que j'aime être explicite, mais c'est vraiment à vous de décider. –