@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
答案 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页。