我的ActiveAdmin安装中有多个资源,它们具有很多相同的特征,例如:
避免在不同资源上复制此功能的最佳方法是什么?
我已经设置了装饰器以避免在索引视图中重复功能,但是我不确定是否(以及如何?)这可以在其他情况下使用。
答案 0 :(得分:4)
您也可以extend
您的模块。例如:
module AccountManageable
def has_manageable_account
permit_params :name, :email, :role, :avatar
filter :name, as: :string
filter :email, as: :string
# ... other DSL methods
end
end
然后在你的管理员
ActiveAdmin.register Admin do
extend AccountManageable
has_manageable_account
end
答案 1 :(得分:3)
您需要使用Monkey patch扩展DSL:
module ActiveAdmin
# This is the class where all the register blocks are evaluated.
class ResourceDSL < DSL
def your_custom_method attr
#common code
end
end
end
现在您可以在注册的资源文件中使用your_custom_method。
https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/resource_dsl.rb