项目的页面和will_paginate(Item's page and will_pagin

2019-06-24 14:11发布

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

现在,有没有什么方法来获得其照片属于页码?

我试图通过GET参数,但如果用户不进行任何更多操作这仅适用(例如信息的评论中,编辑照片,ECC)。

Answer 1:

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') 正确的查询取决于其排序过滤器,你列出所有对象时,适用于该表。



Answer 2:

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

任何一个环节“显示所有照片”可以包含搜索和分页信息,使用GET参数,你所描述。 或存储,并通过cookie中检索,以便搜索结果继续下去,直到用户清除或选择新的搜索。



Answer 3:

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

究竟如何管理,这将取决于你的应用程序。 在我正在该应用中,流动是这样的,我可以在一般上下文和上下文部件区分。 用户输入从成员#索引页的构件上下文。 所以,我只是设置会话[: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 ...

这在我的应用程序的伟大工程。



文章来源: Item's page and will_paginate