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

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

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

有帮助吗?

解决方案

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')。正确的查询取决于在列出所有对象时,您将哪个排序过滤器应用于该表。

其他提示

页码很大程度上取决于您的搜索结果。您的搜索可能有 1、10 或 100 页,具体取决于结果集和每页的项目数。

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

这是另一个解决方案:will_paginate仅使用查询字符串参数'search_field'和'page';您可以从Rails参数哈希中提取它们。如果您跟踪使用会话状态的人,则可以在需要时重新申请它们。

确切的管理如何取决于您的应用程序。在我正在处理的应用程序中,流程使我可以区分一般环境和成员上下文。用户从成员#索引页面输入成员上下文。因此,我只是在输入到成员上下文时将Session [:Member_Context]设置为;例如在成员#编辑中。然后,在成员#索引中,我有以下代码:

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 ...

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top