通过下拉菜单选择每页多少结果
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
。
我使用 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
。