2011-11-01 107 views
3

我使用will_paginate作爲聯繫人顯示視圖中的嵌套註釋。聯繫人控制器如下所示: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個,並且頂部的分頁符被顛倒,它是「下一個,2,1,先前」而不是「先前的1,2,下一個」 ???

回答

0

多麼愚蠢!最後發現問題,元素有一個「浮動:正確」,這樣就導致了反向命令....

0

我的第一個想法是,:include => :notes可能會混淆will_paginate。你有沒有試圖離開它?

+0

不幸的是,沒有區別。 – John

3

您是否嘗試將訂單移入範圍?

你可以像

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

模型中的一個範圍,然後再編寫PAGINATE線

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

爲什麼你將'order'封裝在一個範圍內而不是直接調用它('@ contect.notes.order(「created_at ASC」)。paginate(....)')? –

+0

好點丹。這是從我的Rails 2.3天剩餘的。你說得很對。我想這取決於John正在使用的Rails版本。 – Simmo

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 
0

您提供:order => "created_at ASC"到paginate方法而不是您想要以某種方式排序的活動對象。我找不到will_paginate gem, 中的確切點,但我敢打賭,視圖幫助程序方法will_paginate會檢查順序以查看它是從左到右還是從右到左。

SIMMO的回答修改後的版本包含丹Seavers suggesion應該是正確的:

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