使用ActiveAdmin的DSL与共享模块包括

我正在尝试为使用ActiveAdmin注册的模型进行一些常见/共享操作。 我有以下代码:

# app/admin/concerns/activatable.rb module Activatable def self.included(dsl) dsl.member_action :deactivate, method: :put do dsl.resource.deactivate! redirect_to dsl.resource_path, notice: 'Deactivated.' end end end # app/admin/course.rb ActiveAdmin.register Course do include Activatable # ... end 

当我运行rails server ,服务器立即退出抛出以下内容:

 /Users/Doug/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.1/lib/active_record/ dynamic_matchers.rb:26:in `method_missing': undefined method `member_action' for # (NoMethodError) 

DSL似乎与我的course.rbfunctioncourse.rb ,其中来自activatable.rb的代码工作正常(尽管没有dsl.* )。 有任何想法吗?

我已经解决了这个问题 – 在我的app/models/concerns我有一个同名的app/models/concerns ,Rails似乎混淆了这些。 我将共享的ActiveAdmin模块重命名为AdminActivatable ,现在我可以访问DSL对象了。