Kaminari page_method_name configuration fails

168 Views Asked by At

I have a Rails 4.2 framework and use Kaminari to paginate. Everything works great, but I want to test everything with Capybara, thus I run into the page conflict. So I wanted to rename the page_method_name of Kaminari and followed the guide from them:

$ bundle exec rails g Kaminari:config

This results in this file

app/config/initializers/kaminari_config.rb

Kaminari.configure do |config|
     config.page_method_name = :plant
end

In which I simply uncommented the config.page_method_name and set it to :plant (as an example from the Kaminari docs to avoid any reserved method name conflicts for something like :kaminari_page). Then I adjusted the appropriate controller to

    def index
      @q = Interaction.published.order(updated_at: :desc).limit(200).ransack(params[:q])
      @selection = @q.result
      @interactions = Kaminari.paginate_array(@selection).plant(params[:page]).per(10)
      respond_to do |format|
        format.html
        format.js
      end
    end

I restarted everything and got this error when visiting the

undefined method `plant' for #Kaminari::PaginatableArray:0x00005568fb42ba30

Gemfile.lock:

kaminari (1.2.1)
      activesupport (>= 4.1.0)
      kaminari-actionview (= 1.2.1)
      kaminari-activerecord (= 1.2.1)
      kaminari-core (= 1.2.1)
    kaminari-actionview (1.2.1)
      actionview
      kaminari-core (= 1.2.1)
    kaminari-activerecord (1.2.1)
      activerecord
      kaminari-core (= 1.2.1)
    kaminari-core (1.2.1)

I was then googling around and also added require 'kaminari' (which does not make so much sense, because I did not get the uninit constant error) and also included the Kaminari configure section into the class Application < Rails::Application inside config/application.rb. Nothing worked, always the same error.

1

There are 1 best solutions below

8
Thomas Walpole On

You show your files location as app/config/initializiers/kaminari_config.rb. If that is the actual location of your file it fully explains why the method doesn't exist. The location should be app/config/initializers/kaminari_config.rb. With the location you specified it wouldn't be automatically loaded when the app starts.

If the location you showed is just a type then that wouldn't be the cause, but if you didn't include Capybara into the global object, which you shouldn't be doing anyway, then you wouldn't have a name collision. Current versions of Capybara issue a warning when you do include it into the global object specifically for this reason.

Also is there any reason you're grabbing all the results and then paging them, rather than using the page (or plant) and per scopes that would be defined on Interaction?