Неопределенная страница метода для ошибки #<Array: 0xc347540> kaminari "page". rails_admin
Я использую rails_admin. когда я иду на определенный ресурс. по типу URL
localhost:3000/admin/rule
чем это дает мне эту ошибку. код является:
scope = Rule.all
scope.page(1).per(2)
, приведенный выше код записан в rails_admin gem.in в файле с именем mongoid.rb, который находится в папке адаптеров. полный журнал это:
NoMethodError (undefined method `page' for #<Array:0xcea7408>):
mongoid (2.4.8) lib/mongoid/criteria.rb:385:in `method_missing'
/home/usman/.rvm/gems/ruby-1.9.2-p290@system/bundler/gems/kaminari-809105ad782a/lib/kaminari/models/mongoid_extension.rb:11:in `page'
/home/usman/.rvm/gems/ruby-1.9.2-p290@system/bundler/gems/rails_admin-069819944cc9/lib/rails_admin/adapters/mongoid.rb:37:in `all'
/home/usman/.rvm/gems/ruby-1.9.2-p290@system/bundler/gems/rails_admin-069819944cc9/app/controllers/rails_admin/main_controller.rb:127:in `get_collection'
/home/usman/.rvm/gems/ruby-1.9.2-p290@system/bundler/gems/rails_admin-069819944cc9/app/controllers/rails_admin/main_controller.rb:39:in `list_entries'
/home/usman/.rvm/gems/ruby-1.9.2-p290@system/bundler/gems/rails_admin-069819944cc9/lib/rails_admin/config/actions/index.rb:30:in `block (2 levels) in <class:Index>'
Что я должен сделать, чтобы устранить эту ошибку?
4 ответа
Я уже давно сталкиваюсь с этой проблемой, используя Mongoid. Иногда обновление страницы в RailsAdmin может исправить это.
Я понял, что проблема в том, что хуки Kaminari не инициализируются в моей среде, поэтому модели, которые используют методы расширения Kaminari, не имеют их в наличии.
Я просто взял следующую строку из railtie Каминари и поместил ее в начало инициализатора rails_admin:
Kaminari::Hooks.init
Теперь, похоже, у меня все работает. Однако я не знаю, почему обратный вызов ActiveSupport не выполняет этот код.
Вы не можете вызывать методы Каминари на Array
, так как Rule.all
вернусь Array
,
Таким образом, вы должны сделать что-то вроде этого: Rule.page(1).per(2)
Вот документация и примеры использования Kaminari:
Использовать этот
Kaminari.paginate_array(Rule.all).page(params[:page])
Решение Кадера великолепно! Единственное, что я обнаружил, я должен добавить.per, чтобы все заработало.
Kaminari.paginate_array(Rule.all).page(params[:page]).per(PER_PAGE_RECORDS)