使用kaminari查找给定记录的页面

时间:2012-11-13 16:55:29

标签: ruby-on-rails-3 kaminari

Ruby on Rails 3项目。更新记录后,我们返回所有记录的索引(不是更新记录的视图)。该索引使用Kaminari进行分页。我们如何返回包含更新记录的索引页面?

1 个答案:

答案 0 :(得分:2)

Java JPA / Hibernate Finding out the page containing a given record using JPA (Hibernate)有类似的问题和答案,它显示了在索引视图中获取记录偏移所需的sql。像

这样的东西
SELECT COUNT(*)
FROM Model r
WHERE r.column < ?
ORDER BY r.id

页码将偏移/ records_per_page + 1.

那么问题是如何从Kaminari获取records_per_page? Kaminari允许您通过Model.paginates_per设置配置中每页的记录数,以及特定模型的记录数。它提供Model.default_per_page方法来生成模型的每页记录数。

决定页面的最佳位置将是显示索引的控制器方法。该方法已经获取页面参数(如果存在)以显示正确的页面。另一种方法是在重定向之前计算页面并发送页面参数。让我们试试前者。

保存编辑后,我们重定向到索引,并使用参数标识我们希望包含在索引页面redirect with params中的记录。索引按Model.column排序。

redirect_to model_index_url(:for_column => @model_record.column), 
   :notice => 'Record saved'

然后在控制器的索引方法中,我们让页面参数控制,或者从for_column参数计算页面(如果存在)。

page = 1 
if (params[:page])
  page = params[:page]
elsif (params[:for_column])
  offset = Model.select('count(*) as count').where('? < column',
     params[:for_column]).order(id).first
  page = offset.count/Model.default_per_page + 1
end
@records = Model.all.order('column desc').page(page)

当然,Model和Model.column代表应用程序的模型和列名。