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

Mih*_*ika 3 ruby-on-rails kaminari

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

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

path_to_next_page(items, params: params)
Run Code Online (Sandbox Code Playgroud)

这给了我如下内容:

/items?param1=value1&page=1

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

/项目?页=1

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

path_to_next_page(items, params: {page: params['page']})
Run Code Online (Sandbox Code Playgroud)

我也解决了这个问题,并对各个页面链接尝试了以下操作:

paginate items, params: {page: params['page']}
Run Code Online (Sandbox Code Playgroud)

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

有没有办法生成只包含页面参数的 URL?

Sha*_*ell 5

分页的正常用例是您确实需要所有其他参数(您需要相同结果的第 n 页),这就是为什么删除请求中的其他参数有点困难。

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

= paginate @items, params: { param1: nil }
Run Code Online (Sandbox Code Playgroud)

如果您想从分页链接中删除所有参数,您可以以编程方式执行此操作,但您需要小心“特殊”参数,即您可能想要忽略: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
Run Code Online (Sandbox Code Playgroud)