Rails: activeadmin, undefined метод `per 'для # <ActiveRecord:: Relation: 0x4d15ee0>

Я успешно установил ActiveAdmin:

Мой код gemfile:

source 'https://rubygems.org'

 gem 'rails', '3.2.10'

 # Bundle edge Rails instead:
 # gem 'rails', :git => 'git://github.com/rails/rails.git'

 gem 'sqlite3'


 # Gems used only for assets and not required
 # in production environments by default.
 group :assets do
   gem 'sass-rails',   '~> 3.2.3'
   gem 'coffee-rails', '~> 3.2.1'

   # See https://github.com/sstephenson/execjs#readme for more supported runtimes
   # gem 'therubyracer', :platforms => :ruby

   gem 'uglifier', '>= 1.0.3'
 end

 gem 'jquery-rails'

 gem 'twitter-bootstrap-rails'

 gem 'activeadmin'

  # gem "meta_search",    '>= 1.1.0.pre'
 gem "spud_photos"
 gem 'devise'

 gem 'cancan'
 gem 'rolify'

и я сделал это:

 bundle
 rails g active_admin:install
 rake db:migrate
 rails g active_admin:resource product

Я связал некоторые модели с ActiveAdmin.

Ошибка после нажатия на панели управления ссылкой продукта:

 undefined method `per' for #<ActiveRecord::Relation:0x4d15ee0>

Ответ 1

Active Admin нужен kaminari pagination Если вы хотите использовать, будет разбита на страницы, вы можете сделать псевдоним для того, чтобы функции paginate соответствовали каминари:

# config/initializers/will_paginate.rb
if defined?(WillPaginate)
  module WillPaginate
    module ActiveRecord
      module RelationMethods
        alias_method :per, :per_page
        alias_method :num_pages, :total_pages
      end
    end
  end
end

module ActiveRecord
  class Relation
    alias_method :total_count, :count
  end
end

И этот работал у меня.

Ответ 2

Это помогло мне:

 if defined?(WillPaginate)
   ActiveSupport.on_load :active_record do
     module WillPaginate
       module ActiveRecord
         module RelationMethods
           def per(value = nil) per_page(value) end
           def total_count() count end
         end
       end
       module CollectionMethods
         alias_method :num_pages, :total_pages
       end
     end
   end
 end

Ответ 3

Вы можете создать инициализатор для Kaminari, например:

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

По моему опыту, мне пришлось перезапустить сервер, чтобы он работал. Все это.

Ответ 4

Я использую Ruby 2.1.5p273 и Rails 4.1.8. Я столкнулся с той же проблемой. @mohamed-ibrahim ответ решил ошибку underfined method 'per', но получил еще одну ошибку

Отображение c:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/bundler/gems/activeadmin-06bf79c58216/app/views/active_admin/resource/index.html.arb, где строка # 2 поднята: неправильное количество аргументов (0 для 1)

Добавление alias_method :total_count, :count исправлено.

if defined?(WillPaginate)
  module WillPaginate
    module ActiveRecord
      module RelationMethods
        alias_method :per, :per_page
        alias_method :num_pages, :total_pages
        alias_method :total_count, :count
      end
    end
  end
end

Ответ 5

У меня была такая же проблема, и я переключился с WillPaginate на Kaminari для своего приложения.

Это простое изменение: paginate (страница: 1, per_page: 10) становится страницей (1).per(10)

Я думаю, это зависит от того, насколько глубоко будетPaginate запутан с вашим приложением.

Ответ 6

Это сработало для меня:

Инициализаторы/will_paginate.rb

if defined?(WillPaginate)
  module WillPaginate
    module ActiveRecord
      module RelationMethods
        alias_method :per, :per_page
        alias_method :num_pages, :total_pages
        alias_method :total_count, :total_entries
      end
    end
  end
end