【问题标题】:Filtering models with pagination only filters first page - rails 3过滤带有分页的模型只过滤第一页 - rails 3
【发布时间】: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?) }

在视图中,我使用&lt;%= paginate @registers %&gt; 对列表进行分页。

【问题讨论】:

  • 点击第二页的时候,可以看到URL中的end_date和start_date参数对吧? Kaminari 自动通过它们?
  • 请注意,日期过滤不能与这样的分页一起使用。您应该将数据集描述为包含所有条件的查询,然后对其进行分页。例如。 Register.where('payment_date &lt;= ? AND payment_date &gt;= ?', @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


【解决方案1】:

就像上面评论中提到的@Raffael,我不得不使用@registers = @registers.where(..) 而不是@registers.delete_if(..),因为它“把你的页码搞砸了”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2021-02-28
    • 2018-06-02
    • 2018-07-10
    • 2012-01-03
    • 2016-11-20
    • 1970-01-01
    相关资源
    最近更新 更多