will_paginate限制和命令不工作

时间:2011-11-01 17:47:31

标签: ruby-on-rails

我使用will_paginate作为联系人节目视图中的嵌套音符。联系人控制器如下所示:

    @contact = Contact.find(params[:id], :include => :notes)
@notes = @contact.notes.paginate(:page => params[:page], :per_page => 5, :order => "created_at ASC")

联系人展示视图包含<%= will_paginate @notes %>标记。这是有效的,但排序顺序不正确,它显示所有6个音符而不是5个,顶部的分页是相反的,它是“next,2,1,previous”而不是“previous,1,2,next” ???

5 个答案:

答案 0 :(得分:3)

您是否尝试将订单移至范围内?

您可以在模型中使用范围,例如

scope :order_by, lambda { |o| { :order => o } }

然后将您的分页行写为

@notes = @contact.notes.order_by("created_at ASC").paginate(:page => params[:page], :per_page => 5)

答案 1 :(得分:0)

我的第一个想法是:include => :notes可能会混淆will_paginate。你试过把它留下来吗?

答案 2 :(得分:0)

你可以这样做:

@notes = @contact.notes.paginate(:page => params[:page], :per_page => 5, :order => "notes.created_at ASC")

class Contact < ActiveRecord::Base
  has_many :notes,:order => "...." #remove this order option if you did
end

class Note < ActiveRecord::Base
  default_scope :order => "..." # remove this order option if you did
end

答案 3 :(得分:0)

您向paginate方法提供了:order => "created_at ASC",而不是您希望以某种方式排序的活动对象。我找不到will_paginate宝石中的确切点, 但我敢打赌,视图助手方法will_paginate检查顺序,看它是从左到右,从右到左。

修改版本的Simmo回答Dan Seavers的建议应该是正确的:

@notes = @contact.notes.order("created_at ASC").paginate(:page => params[:page], :per_page => 5)

答案 4 :(得分:0)

多么愚蠢!!终于找到了问题,元素有一个“浮动:正确”,这样就导致了相反的顺序......