11

While using kaminari, I got an error.

Gemfile:

# gem 'will_paginate', '~> 3.0.6'
# gem 'will_paginate-bootstrap'

gem 'kaminari'

lists_controller.rb

  def index
    if params[:tag]
      @lists = List.tagged_with(params[:tag]).order(created_at: :desc).paginate(page:params[:page], per_page: 3 )
    else
      @lists = List.all.order(created_at: :desc)
    end
  end

I also user .page params[:page].per(2) follow .order(created_at: :desc) but not work

views/lists/index.html.erb

<%= paginate @lists %>

the error is here

undefined method `total_pages' for #<List::ActiveRecord_Relation:0x007fa2303e3fa8>
Extracted source (around line #26):             
    </div>
  </div>
<%= paginate @lists %>
  <div class="container"> 
    <div class="row">
      <div class="col-md-8">

I was following a railscasts video about kaminari, but they did not have any error.

notapatch
  • 6,569
  • 6
  • 41
  • 45
dongdongxiao
  • 159
  • 1
  • 2
  • 10

4 Answers4

12

You need to paginate both queries. I recommend something like:

def index
  if params[:tag]
    @lists = List.tagged_with(params[:tag])
  else
    @lists = List.all
  end
  @lists = @lists.order(created_at: :desc).paginate(page:params[:page], per_page: 3 )
end

Otherwise @lists will not be a pagination object when params[:tag] is nil.

Shelvacu
  • 4,245
  • 25
  • 44
  • Thanks a million! It work ,very very thanks. add @list . user .page(params[:page]).per(5) ``` @lists = @lists.order(created_at: :desc).page(params[:page]).per(5) ``` the page OK. – dongdongxiao Mar 17 '16 at 21:00
  • 1
    @user5590209 If I've solved your problem please accept my answer by hitting the check mark next to it. – Shelvacu Mar 17 '16 at 21:07
  • thanks remind, I am new come here. now is it ok ? choose your answer is best and chick nike logo. – dongdongxiao Mar 17 '16 at 21:15
1

Try to paginate with:

 List.tagged_with(params[:tag]).order(created_at: :desc).page(params[:page]).per(3)
PatNowak
  • 5,721
  • 1
  • 25
  • 31
0

I had a similar issue, it was because the commontator gem was bringing in methods from will_paginate and overriding the base ActiveRecord class.

The error was in the call stack for the page_entries_info method which seems to be a common method name between both libraries.

To fix, you can explicitly reference the method with this:

So the view code:

      <%= Kaminari::Helpers::HelperMethods.page_entries_info @events %>
      <%= link_to "Next", path_to_next_page(@events) %>
      <%= link_to "Prev", path_to_prev_page(@events) %>

and in an initializer (initializers/kaminari_config.rb)

module Kaminari
  module Helpers
    module HelperMethods
      extend ActionView::Helpers::TranslationHelper
      module_function :page_entries_info
    end
  end
end

This is a very hacky fix, but hope it helps.

3DPrintScanner
  • 914
  • 8
  • 7
-1

Try:

order(:nome).page page

Worked for me

Tomáš Staník
  • 1,319
  • 1
  • 10
  • 23