我正在尝试为使用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.*
)。有什么想法吗?
答案 0 :(得分:2)
我已经解决了这个问题 - 我的app/models/concerns
中有一个同名的问题,Rails似乎混淆了这些问题。我将共享的ActiveAdmin模块重命名为AdminActivatable
,现在我可以访问DSL对象了。