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?
分页的正常用例是您确实需要所有其他参数(您需要相同结果的第 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)