在分页结果集中包含1个前一个和下一个下一个元素

时间:2014-04-17 05:16:26

标签: ruby-on-rails ruby ruby-on-rails-4 kaminari

我有这个:

  source = MyModel.all.some_filter(some_condition).order("condition123 ASC")   # 1
  res1 = source.page(params[:page]).per(PAGE_SIZE)                         # 2

我还希望从source中检索另外2项"环绕" res1 - 其邻居:

  neighbour1 = 
    if params[:page] > 1
      source.page(params[:page] - 1).per(1).order("condition123 DESC") 
    else
      nil
    end

   neighbour2 = 
     unless last_page(source)
       source.page(params[:page] + 1).per(1) 
     else
       nil
     end

并将所有结果合并在一起:

full_result = neighbour1 + res1 + neighbour2 

首先,有没有办法让它更有效?

如果neighbour1neighbour2为零,如何合并结果?如果这样做:

    if params[:page] > 1
     source += source.page(params[:page] - 1).per(1).order("condition123 DESC") 
    end

然后源将转换为数组,我再也无法使用页面了。我知道我可以通过Kaminary.page执行此操作,但我更倾向于让源不要将自身转换为数组并保持MyModel::ActiveRecord_Relation

0 个答案:

没有答案