通过下拉菜单选择每页多少结果

Choosing how many results per page through drop down menu

我使用 kaminari 分页 gem。我可以将每页的结果限制为 6。这是我在 products_controller:

中分页的示例
def index
  @products = Product.order(:title).page(params[:page]).per(6)
end

但我希望用户能够通过用户界面视图更改它,而不是在分页代码中对“6”进行硬编码。我想要视图上的下拉菜单,以便用户可以 select “3”、“6”或“9”。我怎样才能做到这一点?我猜它可能涉及一个实例变量来存储用户的 selection 但我不确定,有人可以帮忙吗?我的 application.html.erb:

中有这个下拉菜单
<div id="per-page">
  <select>
    <option value="3">3</option>
    <option value="6">6</option>
    <option value="9">9</option>
  </select>
</div>

name(例如 'per')添加到您的 select 字段,例如:

<select name="per"> ... </select>

您可能还想研究使用 select_tag,这将帮助您确保根据用户的 selection select 编辑适当的选项。

然后修改:

Product.order(:title).page(params[:page]).per(params.fetch(:per, '6').to_i)

这将获取用户的 selection(如果 none 被 selected,则为 '6'),并将其强制为整数(我不确定这是否Kaminari 需要强制。

是的,您可能需要一个 "Go" 按钮。您应该能够像这样包装 select 字段:

 <form>
   <div id="per-page"> ... </div>
   <button>Go!<button>
 </form>

这应该可行,因为表单的默认操作是当前页面。

假设您正在使用 jQuery 并且您的 select 字段的 ID 为 per,您也可以省略该按钮(尽管您仍然需要 form),并在 JavaScript 中执行:

$('#per').on('change', function() {
  $(this).closest('form').submit();
});

一些调试建议

<%= debug params %> 放在 application.html.erb 底部的某处(但在 body 内)。

尝试手动将 per 参数添加到您的 URL,例如 localhost:3000/search?per=3