我在我的rails应用中使用了will_paginate:https://github.com/mislav/will_paginate
在我的帖子控制器中:
@posts = Post.order("created_at DESC").paginate(:page => params[:page], :per_page => 10)
在我看来:
<ol>
<%= render (@posts) %>
</ol>
<%= will_paginate @posts :next_label => "next" , :previous_label => 'previous' %>
在我的帖子中:
<li><%= link_to post.title, post_path(post) %></li>
在第一页上,这给我一个列表顺序列表1-10,但是当我转到下一页时,我得到一个不同的1-10列表。我如何得到它,以便在下一页是11-20?
Started GET "/?page=2" for 127.0.0.1 at 2014-03-30 22:11:06 -0400
Processing by PostsController#index as HTML
Parameters: {"page"=>"2"}
答案 0 :(得分:2)
您应该在视图中尝试以下操作: -
<%- page = params[:page].to_i%>
<ol start = "#{page > 1 ? (((page -1) * 10) + 1) : 1}">
<%= render (@posts) %>
</ol>
<%= will_paginate @posts :next_label => "next" , :previous_label => 'previous' %>
您应该指定ol标签的起始编号。
答案 1 :(得分:1)
试试这个
@posts = Post.paginate(:page => params[:page], :per_page => 10, :order => 'created_at DESC')
答案 2 :(得分:1)
我的应用曾经有过类似的内容,然后我想,为什么按created_at
排序,如果我可以通过ID
更好地订购...我的意思是你不能拥有在数据库post
中,标识为created_at
的日期晚于标识为10的帖子,如果按日期或标识排序,则id为1的帖子将首先出现在两种情况下。此外,通过ID进行排序的处理要好得多,因为created_at
会在几秒钟内保存时间戳,这可能会使订购时感到困惑。所以我会这样做:
@posts = Post.order("id DESC").paginate(:page => params[:page], :per_page => 10)
!注意:您不应该触摸(更新/修改)应用中的created_at
字段,created_at
应该保持不变,如果您需要在何时显示帖子已发布,您最好添加published_at
字段。