项目的页面和 will_paginate
-
21-08-2019 - |
题
我有一些照片通过 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 ...
这在我的应用程序中效果很好。