我目前在我的铁路网站上有一个页面,默认情况下会使用will_paginate显示每页25个结果。但是,我希望有一个下拉菜单,允许用户从预定的值列表中选择显示的结果数。我查看了类似问题here的答案,但我对顶级解决方案的问题是我在同一页面中也有一个搜索字段并且每页更改结果数量因此删除了搜索参数是一个。
我想知道我是否有办法解决这个问题?提前谢谢!
答案 0 :(得分: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中的网址如下所示: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)
答案 1 :(得分: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