如何自定义Kaminari URL仅包含某些参数?

我目前在我的项目中使用kaminari进行分页。生成的url除了 page 参数外,还包含其他参数。

例如,我正在使用以下内容生成我的下一页网址:

path_to_next_page(items,params: params)

这给了我以下内容:

/ items?param1 = value1&page = 1

但是,我只希望页面参数可见,而其他参数不可见:

/ items?page = 1

我尝试了以下代码,但是它仍然为我提供了带有所有参数的URL:

path_to_next_page(items,params: {page: params['page']})

我也遇到了this问题,并尝试了以下各个页面链接:

paginate items,params: {page: params['page']}

但是,这也会生成带有所有参数的URL。

有什么方法可以仅使用page参数生成URL?

xhq3645254 回答:如何自定义Kaminari URL仅包含某些参数?

分页的正常用例是您确实希望所有其他参数(您希望获得相同结果的第n页),这就是为什么很难删除请求中的其他参数的原因。

您传递到paginate调用中的参数将合并到当前页面参数中以生成链接。这意味着您可以通过将参数的值设置为nil来删除参数,前提是您知道参数的名称,例如

= paginate @items,params: { param1: nil }

如果您想从分页链接中删除所有参数,则可以通过编程方式执行此操作,但是您需要注意“特殊”参数,即您可能想忽略:controller:action例如。例如

# Get a list of params we want to nullify
params_to_remove = params.keys.select { |param| ![:action,:controller,:page].include?(params) }

# Create a hash of those params mapped to nil
paging_params = params_to_remove.inject({}) { |param,hsh| hsh[param] = nil; hsh }

= paginate @items,params: paging_params
,

在您的控制器中:

class ItemsController < ApplicationController
  ITEMS_PER_PAGE = 10

  def index
    @items = Item.page(params[:items_page]).per(ITEMS_PER_PAGE)
  end
end

在您看来:

= paginate @items,param_name: :items_page

现在它将添加到您的参数items_page中。

例如/items?items_page=1

本文链接:https://www.f2er.com/3168015.html

大家都在问