我有一个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 :(得分: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
希望这有帮助。