Rails:activeadmin,未定义的方法`per'用于#<activerecord :: relation:0x4d15ee0> </activerecord :: relation:0x4d15ee0>

时间:2013-02-19 13:14:05

标签: activeadmin

我成功安装了ActiveAdmin:

我的gemfile代码:

来源'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>

8 个答案:

答案 0 :(得分:32)

Active Admin需要kaminari分页 如果你想使用will paginate,你可以为will paginate函数创建别名来匹配kaminari:

# 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

这个对我有用。

答案 1 :(得分:20)

这个帮助了我:

 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

答案 2 :(得分:8)

您可以为Kaminari创建一个初始化程序,如下所示:

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

根据我的经验,我必须重新启动服务器才能使其正常工作。就这样。

答案 3 :(得分: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

答案 4 :(得分:0)

我有同样的问题,并从WillPaginate切换到我的应用程序的Kaminari。

这是一个简单的改变:paginate(page:1,per_page:10)变为page(1).per(10)

我想这取决于将阴茎与你的应用程序陷入困境。

答案 5 :(得分:0)

这对我有用:

初​​始化/ 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

答案 6 :(得分:0)

以上答案不再起作用。 @zitoon给了here一个更新的答案:

if defined?(WillPaginate)
  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

我自己尝试过。有效。

答案 7 :(得分:0)

如果同时使用kaminari和will_paginate,则肯定会遇到此错误。简而言之,kaminari和will_paginate彼此不兼容。如果您正在使用rails_admin(使用kaminari进行分页)并且还使用will_paginate,则需要将以下代码添加到config目录下的一个初始化程序中,或者您可以创建一个新文件,假设名称为'will_paginate',然后添加代码,并将其放入初始化程序目录。

if defined?(WillPaginate)
  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