params[:page] 在 will_paginate 中结转
params[:page] carry-over in will_paginate
在我们的应用程序中,有一个 purchase orders
的列表,其中有 order items
。两个列表都使用 will_paginate
。这是 purchase orders
:
的代码
@orders = @orders.page(params[:page]).per_page(30)
这是 order items
的代码:
@order_items = @order_items.page(params[:page]).per_page(30)
如代码所示,他们都在 params[:page]
开始回复。问题是当用户打开 purchase orders
的第 2 页时,params[:page]
被设置为 2
。然后 order items
列表将从 params[:page] = 2
开始,而不是第 1
页。这会导致 order items
的第 1 页未列出。 params[:page]
结转引起的这个问题有什么好办法解决吗?
我们通过以下代码(在 before_action 中)为每个控制器记住参数 [:page] 解决了这个问题
def page_params
key_sym = ('page_' + params[:controller].sub('/', '_')).to_sym
if params[:page] then
session[key_sym] = params[:page]
elsif session[:key_sym]
params[:page] = session[:key_sym]
end
end
上述解决方案的潜在问题是我们无法重置 session[key_sym]
,它可能会在下一个 index
时浮动。
在我们的应用程序中,有一个 purchase orders
的列表,其中有 order items
。两个列表都使用 will_paginate
。这是 purchase orders
:
@orders = @orders.page(params[:page]).per_page(30)
这是 order items
的代码:
@order_items = @order_items.page(params[:page]).per_page(30)
如代码所示,他们都在 params[:page]
开始回复。问题是当用户打开 purchase orders
的第 2 页时,params[:page]
被设置为 2
。然后 order items
列表将从 params[:page] = 2
开始,而不是第 1
页。这会导致 order items
的第 1 页未列出。 params[:page]
结转引起的这个问题有什么好办法解决吗?
我们通过以下代码(在 before_action 中)为每个控制器记住参数 [:page] 解决了这个问题
def page_params
key_sym = ('page_' + params[:controller].sub('/', '_')).to_sym
if params[:page] then
session[key_sym] = params[:page]
elsif session[:key_sym]
params[:page] = session[:key_sym]
end
end
上述解决方案的潜在问题是我们无法重置 session[key_sym]
,它可能会在下一个 index
时浮动。