假设Songs has_many Comments; 我怎么能够:
1)有几种方法可以做到这一点,最简单的是计数器缓存,你这样做我创建一个列来维持计数和rails会使计数加快速度.在这种情况下,列将是comments_count
songs = Song.all(:order => "comments_count DESC")
Run Code Online (Sandbox Code Playgroud)
或者你可以做一个时髦的查询:
songs = Song.all(:joins => "LEFT JOIN comments ON songs.id = comments.song_id",
:select => "song.name, count(*)",
:group => "song.name",
:order => "count(*) DESC")
Run Code Online (Sandbox Code Playgroud)
使用第二种方法的一些注意事项,您需要在歌曲中选择的任何内容,您需要在group by语句中包含这些内容.如果您只需要带有评论的歌曲,那么您可以:
songs = Song.all(:joins => :comments,
:select => "song.name, count(*)",
:group => "song.name",
:order => "count(*) DESC")
Run Code Online (Sandbox Code Playgroud)
哪个看起来更好但是因为它有一个内连接你不会得到没有评论的歌曲
2)只是一个包含/加入
songs = Song.all(:include => :comments, :order => "comment.created_at"
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助!
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |