我正在使用 ActiveAdmin 并且我有一个带有单表继承的项目。我的问题很简单:我的模型的公共(public)部分的形式是否可以只写一次,或者我每次都被迫重写它?

最佳答案

您可以使用 ruby​​ 的 #to_proc 和将 proc 转换为块的技巧。

这是我利用它的解决方案。它允许正常的代码重新加载,不扩展/猴子修补任何现有模块并允许自定义管理定义。

在这个例子中,Animal 是 STI 基类,DogCat 是从它继承而来的。

将以下代码放入 app/admin/animal.rb :

class AnimalAdminConfig
  attr_reader :opts

  def initialize(opts = {})
    @opts = opts
  end

  def to_proc
    this = self

    proc do
      scope :active

      index do
        column this.opts[:name_label], :name
        column ....
      end
    end
  end
end

将以下代码放入 app/admin/cat.rb :
ActiveAdmin.register(Cat, &AnimalAdminConfig.new(name_label: "Kitten's name"))

将以下代码放入 app/admin/dog.rb :
ActiveAdmin.register(Dog, &AnimalAdminConfig.new(name_label: "Puppy's name"))

关于ruby-on-rails - ActiveAdmin 单表继承通用属性表单重写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23157332/

10-13 09:33