通过下拉菜单选择每页的结果数量

时间:2015-01-12 17:26:15

标签: html ruby-on-rails ruby pagination kaminari

我使用kaminari分页宝石。我可以将每页的结果限制为6.这是我在products_controller中的分页示例:

def index
  @products = Product.order(:title).page(params[:page]).per(6)
end

但不是硬编码" 6"在分页代码中,我希望用户能够通过用户界面视图进行更改。我想在视图上有一个下拉菜单,以便用户可以选择" 3"," 6"或" 9"。我怎样才能做到这一点?我猜它可能涉及一个实例变量来存储用户的选择,但我不确定,有人可以帮忙吗?我在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>

1 个答案:

答案 0 :(得分:0)

在您的选择字段中添加name(例如'per'),例如:

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

您可能还需要查看使用select_tag,这将帮助您确保根据用户的选择选择适当的选项。

然后修改:

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

将获得用户的选择(如果没有选择则为'6'),并将其强制转换为整数(我不确定这种强制是否对于Kaminari是必要的)。

是的,你可能需要一个“开始”按钮。您应该能够将您的选择字段包装起来,如:

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

应该有效,因为表单的默认操作是当前页面。

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

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

一些调试建议

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

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