使用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.rb
functioncourse.rb
,其中来自activatable.rb
的代码工作正常(尽管没有dsl.*
)。 有任何想法吗?
我已经解决了这个问题 – 在我的app/models/concerns
我有一个同名的app/models/concerns
,Rails似乎混淆了这些。 我将共享的ActiveAdmin模块重命名为AdminActivatable
,现在我可以访问DSL对象了。