7

我有一些通过 will_paginate 插件在连续页面上拆分的照片。当您打开一张照片然后使用链接返回所有照片时,您总是会返回到第一页(例如,照片显示在第 5 页,您打开照片,单击链接以显示所有照片并期望您在再次第 5 页,但您在第 1 页)。

现在,有什么方法可以获取照片所属的页码吗?

我试图传递一个 GET 参数,但这仅在用户不再执行任何操作时才有效(例如发表评论、编辑照片、ecc。)。

4

3 回答 3

8
page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

换句话说。如果你的照片 ID 为 40 并且之前有 25 条记录(假设已经删除了一些记录),每页有 20 条记录:

page = (25 / 20) + 1 = 2

您可以使用 计算所选记录之前的记录数Model.count(:conditions => ['id < ?', record.id], :order => 'id')。正确的查询取决于您在列出所有对象时应用到该表的排序过滤器。

于 2009-06-30T19:02:00.510 回答
0

页码高度依赖于您的搜索结果。根据结果​​集和每页的项目数,您的搜索可能有 1、10 或 100 页。

任何“显示所有照片”的链接都可以包含搜索和分页信息,使用您描述的 GET 参数。或者通过 cookie 存储和检索,以便搜索结果持续存在,直到用户清除或选择新的搜索。

于 2009-06-30T18:25:53.493 回答
0

这是另一种解决方案: will_paginate 只使用查询字符串参数 'search_field' 和 'page';您可以从 Rails 参数哈希中提取这些。如果你跟踪那些使用会话状态的人,你可以在需要时在你的控制器代码中重新应用它们。

具体如何管理将取决于您的应用程序。在我正在开发的应用程序中,流程是这样的,我可以区分一般上下文和成员上下文。用户从 member#index 页面输入成员上下文。所以我只是在进入成员上下文时设置了 session[:member_context];例如在成员#edit 中。然后,在 members#index 中,我有以下代码:

if session[:member_context]
  @search_field = session[:search_field]
  @page = session[:page]
  # toggle out of member context
  session[:member_context] = nil
else
  @search_field = params[:search_field]
  @page = params[:page]
  # record lastest search in case the user subsequently enters the member context
  session[:search_field] = @search_field
  session[:page] = @page
end
@members = Member.where(<use @search_field>).page(@page)
# and render ...

这在我的应用程序中效果很好。

于 2013-06-09T17:23:33.123 回答