我正在使用 ActiveAdmin 并且我有一个带有单表继承的项目。我的问题很简单:我的模型的公共(public)部分的形式是否可以只写一次,或者我每次都被迫重写它?
最佳答案
您可以使用 ruby 的 #to_proc
和将 proc 转换为块的技巧。
这是我利用它的解决方案。它允许正常的代码重新加载,不扩展/猴子修补任何现有模块并允许自定义管理定义。
在这个例子中,Animal
是 STI 基类,Dog
和 Cat
是从它继承而来的。
将以下代码放入 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/