【发布时间】:2017-05-30 21:29:22
【问题描述】:
我有一个模型,我正在根据用户给出的一些参数进行过滤。过滤工作得很好,但一次 我开始使用分页,只有第一页的记录被过滤,其他的被忽略。 这是我在控制器中用于过滤的代码:
@start_date = params[:start_date]
@registers = Register.all.order("payment_date DESC").page(params[:page]).per(params[:all] ? nil : Kaminari.config.default_per_page)
@registers.delete_if { |r| !(r.payment_date <= @end_date && r.payment_date >= @start_date) if (@start_date.present? && @end_date.present?) }
在视图中,我使用<%= paginate @registers %> 对列表进行分页。
【问题讨论】:
-
点击第二页的时候,可以看到URL中的end_date和start_date参数对吧? Kaminari 自动通过它们?
-
请注意,日期过滤不能与这样的分页一起使用。您应该将数据集描述为包含所有条件的查询,然后对其进行分页。例如。
Register.where('payment_date <= ? AND payment_date >= ?', @end_date, @start_date).order(...).page(...).per_page(...) -
根据数据库的记录数应该有多少页?
-
@PeterHaight 参数被传递到第二页是的。但是,如果第一页不包含任何按日期过滤的记录,则它只是空的,而第二页不是..
-
然后一步一步构建你的查询。
@r = Register.all;@r = @r.where(...) if ...;@r = @r.order(...).page(...).per_page(...)。使用 delete_if 会搞砸你的页码。
标签: ruby ruby-on-rails-3 kaminari pagination