kaminari undefined method `total_pages'

14,263

Solution 1

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.

Solution 2

Try to paginate with:

 List.tagged_with(params[:tag]).order(created_at: :desc).page(params[:page]).per(3)
Share:
14,263

Related videos on Youtube

dongdongxiao
Author by

dongdongxiao

Updated on September 16, 2022

Comments

  • dongdongxiao
    dongdongxiao over 1 year

    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.

  • dongdongxiao
    dongdongxiao about 8 years
    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.
  • Shelvacu
    Shelvacu about 8 years
    @user5590209 If I've solved your problem please accept my answer by hitting the check mark next to it.
  • dongdongxiao
    dongdongxiao about 8 years
    thanks remind, I am new come here. now is it ok ? choose your answer is best and chick nike logo.
  • D7na
    D7na about 6 years
    Works for me. Thanks