4

我想为 redmine 编写一个插件,它依赖于很多自定义字段,所以我想自动创建自定义字段。理想情况下是在插件代码中,或者如果不是通过我可以在安装插件时运行的脚本 - 我真的不想在设置时通过 Web 界面创建 10 多个字段,尤其是当一个是列表时具有相当多的价值。

谁能告诉我是否有标准的方法可以做到这一点?

还有一种从现有安装中导出自定义字段的好方法吗?

4

3 回答 3

3

您应该使用迁移脚本。将您的脚本放入#{PLUGIN_ROOT}/db/migrate并在那里调用.create。Redmine 源包含许多类似的脚本。

例如,脚本可以有一个名称:001_populate_custom_fields.rb.

内容:

class PopulateCustomFields < ActiveRecord::Migration
    def self.up
        CustomField.create ...
    end
    def self.down
    end
end
于 2011-10-03T13:52:20.960 回答
1

正如 Andriy Lesyuk 回答的那样,将您的脚本放在下面#{PLUGIN_ROOT}/db/migrate并使用安装/卸载插件的命令对其进行测试。

要安装插件,请使用以下命令:

rake redmine:plugins:migrate

并卸载它:

rake redmine:plugins:migrate NAME=<your plugin name> VERSION=0

查看官方文档以获取更多详细信息。

例如,脚本001_populate_custom_fields.rb可能类似于:

class PopulateCustomFields < ActiveRecord::Migration
  # method called when installing the plugin
  def self.up
    if CustomField.find_by_name('A New Custom Field').nil?
      CustomField.create(name: 'A New Custom Field', field_format: 'text')
    end
  end

  # method called when uninstalling the plugin
  def self.down
    CustomField.find_by_name('A New Custom Field').delete unless CustomField.find_by_name('A New Custom Field').nil?
  end
end

在从 redmine 数据库表 custom_fields 检查其存在之后,这将创建/删除类型为“文本”的自定义字段“新自定义字段”。

于 2015-01-06T17:25:14.560 回答
0

自定义字段基本上是作为资源实现的(但是 custom_fields 没有资源路由)。我看不出你不能只使用 CustomField.create/new 来创建插件需要的字段的原因。同样,您应该能够只使用 find() 来获取所有现有的自定义字段。但是,我不得不说我以前从未这样做过,也不知道这是否是标准方式。但是,顺便说一句,我看不出这样做有什么问题。

于 2010-03-18T17:59:45.893 回答