will_paginate& filterrific:#array的未定义方法`total_pages':0x007f9f6b4a3320>

时间:2015-06-23 21:00:46

标签: ruby-on-rails will-paginate filterrific

我正在尝试将will_paginatefilterrific结合使用。但我收到以下错误:

  

#Array的未定义方法`total_pages':0x007f9f6b4a3320>

我的控制器操作:

  def index
    @filterrific = initialize_filterrific(
      current_user.assessments,
      params[:filterrific],
      :select_options => {
        sorted_by: Assessment.options_for_sorted_by      },
        :persistence_id => false,
    ) or return
    @assessments = @filterrific.find.page(params[:page]).paginate(page: params[:page], per_page: 10).sort_by &:created_at
    @assessments.reverse!
  end

查看:

<%= render(
  partial: 'list',
  locals: { assessments: @assessments }
) %>

</div>

部分:

<div id="filterrific_results">



    <% @assessments.each do |assessment| %>
    ....
    <% end %>

</div>


<%= will_paginate assessments %>

我哪里错了?

3 个答案:

答案 0 :(得分:1)

问题是您使用以下两种方法将ActiveRecord集合代理转换为数组:

  • .sort_by
  • .reverse

确保使用ActiveRecord方法设置顺序。这应该有效:.order('created_at DESC')

您还调用了两次分页方法:.page.paginate。一次就够了。

答案 1 :(得分:0)

避免在分页集合上调用sort_by。将范围添加到评估中并指定filterrific的范围。

asessment.rb
class Assessment < ActiveRecord::Base
    filterrific(
      available_filters: [
        :oldest_first
      ]
    )
    scope :oldest_first, lambda { order('created_at ASC') }

答案 2 :(得分:0)

这是因为您要同时拨打&#34; .page&#34;和&#34; .paginate&#34;。我可以使用以下代码。我知道你已经解决了这个问题,因为这个问题是在过去的两年里发布的,但我只是分享了我以后会遇到这个问题的朋友的经历。

    @filterrific.find.page(params[:page]).per_page(10)