如何自定义 Kaminari URL 以仅包含某些参数?
How to customise the Kaminari URL to include only certain parameters?
我目前在我的项目中使用 kaminari 进行分页。除了 page 参数之外,生成的 url 还包含其他参数。
例如,我正在使用以下内容生成我的下一页 url:
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。
有什么方法可以生成仅包含页面参数的 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
调用的参数将合并到当前页面参数中以生成 link。这意味着如果您知道参数的名称,则可以通过将它们的值设置为 nil 来删除参数,例如
= paginate @items, params: { param1: nil }
如果您想从分页中删除所有参数,您可以通过编程方式执行此操作 link 但您需要注意 'special' 参数,即您可能想忽略 :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
我目前在我的项目中使用 kaminari 进行分页。除了 page 参数之外,生成的 url 还包含其他参数。
例如,我正在使用以下内容生成我的下一页 url:
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。
有什么方法可以生成仅包含页面参数的 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
调用的参数将合并到当前页面参数中以生成 link。这意味着如果您知道参数的名称,则可以通过将它们的值设置为 nil 来删除参数,例如
= paginate @items, params: { param1: nil }
如果您想从分页中删除所有参数,您可以通过编程方式执行此操作 link 但您需要注意 'special' 参数,即您可能想忽略 :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