我有一些通过 will_paginate 插件在连续页面上拆分的照片。当您打开一张照片然后使用链接返回所有照片时,您总是会返回到第一页(例如,照片显示在第 5 页,您打开照片,单击链接以显示所有照片并期望您在再次第 5 页,但您在第 1 页)。
现在,有什么方法可以获取照片所属的页码吗?
我试图传递一个 GET 参数,但这仅在用户不再执行任何操作时才有效(例如发表评论、编辑照片、ecc。)。
我有一些通过 will_paginate 插件在连续页面上拆分的照片。当您打开一张照片然后使用链接返回所有照片时,您总是会返回到第一页(例如,照片显示在第 5 页,您打开照片,单击链接以显示所有照片并期望您在再次第 5 页,但您在第 1 页)。
现在,有什么方法可以获取照片所属的页码吗?
我试图传递一个 GET 参数,但这仅在用户不再执行任何操作时才有效(例如发表评论、编辑照片、ecc。)。
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 参数哈希中提取这些。如果你跟踪那些使用会话状态的人,你可以在需要时在你的控制器代码中重新应用它们。
具体如何管理将取决于您的应用程序。在我正在开发的应用程序中,流程是这样的,我可以区分一般上下文和成员上下文。用户从 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 ...
这在我的应用程序中效果很好。