在我们的应用中,有一个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]
结转引起的这个问题?
答案 0 :(得分:0)
我们通过记忆params [:page]解决了这个问题,每个控制器都有以下代码(在before_action中)
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
中浮动。