2016-11-14 107 views
0

我目前有一个页面在我的铁路网站,默认情况下,将显示每页使用will_paginate 25结果。但是,我想要一个下拉菜单,允许用户选择从预定值列表中显示的结果数量。我看了一个类似的问题here的答案,但我对顶级解决方案的问题是,我也在同一页面中有一个搜索字段,并更改每页结果的数量,因此删除了搜索参数(如果有的话)。Rails:下拉菜单选择每页的结果将与分页

我想知道是否有任何方法可以解决此问题?提前致谢!

+0

你是什么意思搜索参数被删除?你不能根据选择哪个选择值来改变搜索参数吗? – luke

+0

因此,在我的页面中,我有一个搜索字段,您可以在其中搜索分页结果,因此url变得类似于www.-----./----/?search=---,但是使用给定的答案如果您为每个页面的结果选择不同的值,那么该网址将变为www.------./----/?per_page=---,因此该表格将不再由搜索参数过滤。 – Twis7ed

+0

所以我想知道是否有办法让我同时修改两个参数。 – Twis7ed

回答

0

该选择框被证明是麻烦的,但我发现了一种不同的方式来做同样的功能。

因此,通过使用锚标签并在构建路径时抓取搜索参数,它将保留搜索条件以及任何新的per_page值。 所以5和10页的链接看起来像这样

<%= Link_to "5", current_path(:per_page =>5,:search => params[:search])%> 
<%= Link_to "10", current_path(:per_page =>10,:search => params[:search])%> 

,并在href的URL看起来像这样:whatever.com/current?per_page=10&search=DevOps与提供任何搜索词的变化。

请务必将per_page值添加到控制器以及

per_page = params[:per_page] @items = Item.all.paginate(page: params[:page], per_page: per_page)

0

试试这个:

在你看来 -

<%= form_tag xyz_path, method: :get do %> 
    <%= text_field_tag :search, params[:search] %> 
    <%= select_tag :per_page, options_for_select([10, 20, 50, 100], params[:per_page]) %> 
    <%= button_tag :submit %> 
<% end %> 

在你的控制器 -

unless params[:per_page].present? 
    params[:per_page] = 20 #default 
end 
if params[:search].present? 
    ModelName.where(query: params[:search]).paginate(:page => params[:page], :per_page => params[:per_page]) 
else 
    ModelName.all.paginate(:page => params[:page], :per_page => params[:per_page]) 
end 
相关问题