2011-07-13 31 views
0

我用will_paginate使用newes Rails 3版本。Rails 3:Will_paginate的.paginate不起作用

@videos = user.youtube_videos.sort.paginate :page => page

我还添加了@@per_page属性我youtube_video模型。

但它只是不会分页。我总是列出集合中的所有项目。

我做错了什么?

你的,乔恩。

+1

这是没有足够的信息来帮助你。 ':page => page'中的'page'从哪里来?我也不认为在这里使用'sort'是个好主意。如果你想排序数据库记录,最好使用':order => ...'。 – Mischa

+0

page = setup_page(params [:page])| => |如果!arg1.nil?然后返回arg1.to_i else返回1 end |其中arg1是params [:page] –

+0

使用will_paginate gem的'〜> 3.0.pre4'版本。然后像这样分配per_page:'YoutubeVideo.per_page = 10'。它应该工作! – mislav

回答

1

这里是我的解决办法,我自己的答案,对所有其他的具有will_paginate麻烦和阅读这个问题:

创建一个ApplicationController的方法是这样的:

def paginate_collection(collection, page, per_page) 
    page_results = WillPaginate::Collection.create(page, per_page, collection.length) do |pager| 
    pager.replace(collection) 
    end 
    collection = collection[(page - 1) * per_page, per_page] 
    yield collection, page_results 
end 

然后在你的控制器,在哪儿买

page = setup_page(params[:page]) # see below 
@messages = Message.inbox(account) 
paginate_collection(@messages, page, Message.per_page) do |collection, page_results| 
    @messages = collection 
    @page_results = page_results 
end 

并且在视图:应该分页集合

<% @messages.each do |message| %> 
    <%# iterate and show message titles or whatever %> 
<% end %> 
<%= will_paginate @page_results %> 

要获得规定的page变量,检查:

def setup_page(page) 
    if !page.nil? 
    page.to_i 
    else 
    1 
    end 
end 

所以page = setup_page(params[:page])的伎俩,与简单的方法。


This WORKS!

2

你为什么在这里打电话sort?这似乎是不必要的,可能会导致它找到所有视频并调用分页,而不是注意任何在您的Video模型中定义的变量。相反,通过使用示波器或使用order方法将排序逻辑移动到Video模型中。

+0

我这样做,但它并没有帮助反正...而不是排序,并包括Comparable,我只是提出了一个名为“all_for_user”的新模型实例方法,如下所示:YoutubeVideo.all_for_user(user).paginate:page => page。 ..但没有成功,同一问题 –

+0

@Joern:你为什么要这么做? YoutubeVideo的表格上没有“user_id”列,因此你可以做'user.youtube_videos'或类似的东西? –

+0

这是我第一次做的,也没有与paginate一起工作。这样我也需要对它进行排序......我更喜欢创建自己的方法,在这里我可以明确地定义应该发生什么。 –

相关问题