我使用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>
答案 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
。