将在有序列表上分页

时间:2014-03-31 01:19:56

标签: ruby-on-rails ruby ruby-on-rails-4

我在我的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"}

3 个答案:

答案 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字段。