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

3

我正在尝试为在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个回答

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接