干燥ActiveAdmin

时间:2014-12-05 22:20:11

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

我的ActiveAdmin安装中有多个资源,它们具有很多相同的特征,例如:

  • 相同或相似的范围
  • 相同或类似的控制器方法(例如action_methods)
  • show action
  • 中的类似属性(带代码块)
  • 编辑操作中的类似属性(带代码块)

避免在不同资源上复制此功能的最佳方法是什么?

我已经设置了装饰器以避免在索引视图中重复功能,但是我不确定是否(以及如何?)这可以在其他情况下使用。

2 个答案:

答案 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