我目前在我的项目中使用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?
在您的控制器中:
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
分页的正常用例是,您确实想要所有其他参数(您希望获得相同结果的第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