【问题标题】:find page for given record using kaminari使用 kaminari 查找给定记录的页面
【发布时间】:2012-11-02 03:19:22
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails-3 kaminari


    【解决方案1】:

    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
    

    页码为 offset/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'
    

    然后在控制器的 index 方法中,我们让页面参数管理,或者从 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 代表您的应用程序的模型和列名。

    【讨论】:

    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 2016-03-24
    • 2013-09-12
    • 2014-07-16
    相关资源
    最近更新 更多