【问题标题】:How to fetch the first post when the last in reached in will_paginate and Rails 3?当最后一个到达 will_paginate 和 Rails 3 时,如何获取第一个帖子?
【发布时间】:2012-04-20 10:35:58
【问题描述】:

我有一堆帖子,我希望每页总是显示 3 个。假设我有 4 个帖子,如下:

post 1
post 2
post 3
post 4

如果我使用 will_paginate(或任何分页插件),每页 3 个结果,第 1 页将包含:

post 1
post 2
post 3

第 2 页将包含

post 4

我想让第一页包含帖子 1、2 和 3,第二页将循环回到开头,如下所示:

post 4
post 1
post 2

我如何做到这一点? 谢谢!

【问题讨论】:

  • 第3页应该显示什么?是[3, 4, 1]吗?

标签: ruby-on-rails ruby-on-rails-3 pagination will-paginate


【解决方案1】:

WillPaginate 实际上允许您使用WillPaginate::Collection.create 直接定义它使用的集合。我认为像下面这样的代码应该可以解决问题:

@posts = Post.offset((page - 1) * per_page).limit(per_page)
post_count = @posts.count
if post_count < per_page
  @posts = @posts.all + Post.limit(per_page - post_count).all
end

# At this point you have an array of posts. 
# Now we create the WillPaginate::Collection so will_paginate will work.

@posts = WillPaginate::Collection.create(page, per_page) do |pager|
  pager.replace(@posts)
  pager.total_entries = Post.count
  pager
end

【讨论】:

  • 还是需要设置当前页面,否则分页不起作用。
  • @KandadaBoggu 是的,显然,我假设为此解决方案设置了 pageper_page 变量。
  • 我的意思是WillPaginate::Collection类中的current_page访问器需要在最后一页重置回第一页,如果用户想回收回到第一页。跨度>
  • @KandadaBoggu 集合的current_pagecreate 方法的参数设置,因此任何必须完成的循环只涉及在传递该参数之前对其进行操作。
  • 谢谢!我最终使用了 kaminari 而不是 will_paginate - 它更灵活(尽管它没有内置的方法来执行此操作)。但这确实回答了问题,我非常感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多