2011-09-03 100 views
0

我有一个rails应用程序,其中页面有很多评论。因此,在模型中的关系是:Rails排序关系输出

page.rb:has_many :comments

comment.rb:belongs_to :page

现在我做显示我的观点评论:

<% @page.comments.each_with_index do |comment| %> 
    <%= comment.comment %> 
<%end%> 

我想知道如何用will_paginate分页。我也想让它成为最新的(最高ID的一个首先出现)。有任何想法吗?

回答

0

要订购的评论:

has_many :comments, :order => "id DESC" 

要使用will_paginate只需按逻辑到你的控制器:

@comments = @page.comments.paginate(:page => params[:page]) 
0

不知道的分页,但你可以用这样的顺序查询:

@page.comments.find(:all, :order => "id desc") 

也许will_paginate会照顾其余的?

编辑:(!谢谢),按照约翰的评论Rails的3路的确是:

@page.comments.order("id desc") 
+0

看起来像约翰的答案是有点更全面:)反正我会离开我的答案。我的答案只会针对特定的查询进行排序,而不是默认排序。 – Msencenb

+0

这个答案也很好。取决于您是否希望按id排序的评论作为默认值。 – drummondj

+0

实际上,轨道3这样做的方式是@ page.comments.order(“id desc”) – drummondj

0

你可以使用范围来提供此功能。在询问集合时,范围本质上是过滤和/或排序ActiveRecord模型的一种方式。

范围是Rails的2.x和3.x中之间有一点不同在Rails 2.x中,你可以使用named_scope和default_scope。

class Comment < ActiveRecord::Base 
    default_scope :order => "id DESC" 
end 

并不奇怪,default_scope定义撷取你的记录时,如在Comment.find_by_page_id(100)使用的默认范围。分页应该使用您定义的默认范围来获取您的记录。

在Rails 3.x的定义就像一个默认的范围:

class Comment < ActiveRecord::Base 
    default_scope order("id DESC") 
end 

希望这有助于。