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

时间:2014-07-16 19:22:38

标签: ruby-on-rails ruby ruby-on-rails-4 gem activeadmin

我正在尝试为使用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
#<Class:0x00000101e79850> (NoMethodError)

DSL看起来与course.rb内的功能相同,activatable.rb的代码工作正常(尽管没有dsl.*)。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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