ruby-on-rails - ActiveAdmin单表继承公共(public)属性表单重写

标签 ruby-on-rails ruby forms activeadmin single-table-inheritance

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

最佳答案

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

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

在此示例中,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单表继承公共(public)属性表单重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23157332/

相关文章:

ruby-on-rails - 如果在 Controller 外部声明了方法,为什么这个 Rails 代码可以工作?

json - 在 ruby​​ 中创建嵌套哈希并将其保存到 JSON 中

c++ - 通过使用 WIN32OLE 的 Ruby 的 C++ dll 的代码覆盖率

javascript - 使用 Javascript 将自定义查询字符串变量拉入隐藏表单字段

html - 检查最新检查的单选按钮?

javascript - 从先前选择的字段动态更改表单字段,迭代 javascript

ruby-on-rails - 有没有办法重新渲染?

Mysql::Error: 不正确的字符串值: '\xE9ditos...' with rails

ruby - 将 Time.now 转换为第一个 Unix Day 的确切时间

javascript - 带复选框数组的 Form.Serialize