如何对按日期时间排序的记录进行排序?

时间:2013-10-29 18:14:49

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

@comments现有10条记录按id ASC排序 我想简单地改变订单,所以我编码@comments = @comments.reverse

但我收到此错误消息

ActionView::Template::Error (undefined method `total_count'
<%= page_entries_info(@comments, :entry_name => 'comment').html_safe %>

如果我倒退并将其保留为@comments = @comments,则不会有任何问题。 为什么?如何按created_at DESC订购排序?

@comments = Comment.where(:user_id => user_ids, :commentable_type => commentable)

if params[:page].blank?
    params[:page] = ((@comments.count - 1)/10) + 1
    @comments = @comments.page(params[:page]).per(10)
else
    @comments = @comments.page(params[:page]).per(10)
end

@comments = @comments.reverse

2 个答案:

答案 0 :(得分:5)

您正在接收

ActionView::Template::Error (undefined method `total_count'

因为@comments.reverse返回一个普通数组。您需要具有分页功能的Relation对象。完成排序需求的最佳方法是在评论模型中创建范围:

class Comment < ActiveRecord::Base
  scope :reversed, -> { order 'created_at DESC' }
end

然后通过调用范围来实例化您的评论:

@comments = Comment.reversed

您可以在page集合上调用@comments方法,其余方法应该有效。您可以像以前一样链接where,所以它看起来像:

Comment.reversed.where(:user_id => user_ids, :commentable_type => commentable)

答案 1 :(得分:1)

@comments = Comment.where(:user_id => user_ids, :commetable_type => commentable).order("created_at DESC").page(params[:page]).per(10)

另外,您的页面计算错误会导致浮点数/小数。如果params [:page]为空白,则默认为第1页的第1页。