Rails排序关系输出

时间:2011-09-03 01:52:08

标签: ruby-on-rails ruby-on-rails-3

我有一个rails应用程序,其中页面有很多注释。所以模型中的关系是:

page.rb: has_many :comments

comment.rb: belongs_to :page

现在我通过以下方式在我的视图中显示评论:

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

我想知道如何使用will_paginate对此进行分页。我也希望这样做,以便最新的(最好的id首先出现)。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

订购评论:

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

使用will_paginate只需将逻辑推入控制器:

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

答案 1 :(得分:0)

不确定分页,但您可以使用以下命令查询:

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

也许will_paginate会处理剩下的事情?

编辑:根据约翰的评论(谢谢!),Rails 3的确如此:

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

答案 2 :(得分: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)中所示。 paginate是否应该使用您定义的默认范围来获取记录。

在Rails 3.x中,您可以定义默认范围,如:

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

希望这有帮助。