项目的页面和will_paginate

我有一些照片通过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')计算所选记录之前的记录数。 正确的查询取决于列出所有对象时应用于该表的排序filter。

页码高度依赖于搜索结果。 您的搜索可能包含1页,10页或100页,具体取决于结果集和每页的项目数。

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

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

具体如何管理将取决于您的应用程序。 在我正在开发的应用程序中,流程是这样的,我可以区分一般上下文和成员上下文。 用户从成员#index页面输入成员上下文。 所以我只是在成员上下文的入口处设置session [:member_context]; 例如在成员中#edit。 然后,在成员#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().page(@page) # and render ... 

这在我的应用程序中很有用。