我用will_paginate使用newes Rails 3版本。Rails 3:Will_paginate的.paginate不起作用
@videos = user.youtube_videos.sort.paginate :page => page
我还添加了@@per_page
属性我youtube_video模型。
但它只是不会分页。我总是列出集合中的所有项目。
我做错了什么?
你的,乔恩。
我用will_paginate使用newes Rails 3版本。Rails 3:Will_paginate的.paginate不起作用
@videos = user.youtube_videos.sort.paginate :page => page
我还添加了@@per_page
属性我youtube_video模型。
但它只是不会分页。我总是列出集合中的所有项目。
我做错了什么?
你的,乔恩。
这里是我的解决办法,我自己的答案,对所有其他的具有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!
你为什么在这里打电话sort
?这似乎是不必要的,可能会导致它找到所有视频并调用分页,而不是注意任何在您的Video
模型中定义的变量。相反,通过使用示波器或使用order
方法将排序逻辑移动到Video
模型中。
我这样做,但它并没有帮助反正...而不是排序,并包括Comparable,我只是提出了一个名为“all_for_user”的新模型实例方法,如下所示:YoutubeVideo.all_for_user(user).paginate:page => page。 ..但没有成功,同一问题 –
@Joern:你为什么要这么做? YoutubeVideo的表格上没有“user_id”列,因此你可以做'user.youtube_videos'或类似的东西? –
这是我第一次做的,也没有与paginate一起工作。这样我也需要对它进行排序......我更喜欢创建自己的方法,在这里我可以明确地定义应该发生什么。 –
这是没有足够的信息来帮助你。 ':page => page'中的'page'从哪里来?我也不认为在这里使用'sort'是个好主意。如果你想排序数据库记录,最好使用':order => ...'。 – Mischa
page = setup_page(params [:page])| => |如果!arg1.nil?然后返回arg1.to_i else返回1 end |其中arg1是params [:page] –
使用will_paginate gem的'〜> 3.0.pre4'版本。然后像这样分配per_page:'YoutubeVideo.per_page = 10'。它应该工作! – mislav