我想为 redmine 编写一个插件,它依赖于很多自定义字段,所以我想自动创建自定义字段。理想情况下是在插件代码中,或者如果不是通过我可以在安装插件时运行的脚本 - 我真的不想在设置时通过 Web 界面创建 10 多个字段,尤其是当一个是列表时具有相当多的价值。
谁能告诉我是否有标准的方法可以做到这一点?
还有一种从现有安装中导出自定义字段的好方法吗?
我想为 redmine 编写一个插件,它依赖于很多自定义字段,所以我想自动创建自定义字段。理想情况下是在插件代码中,或者如果不是通过我可以在安装插件时运行的脚本 - 我真的不想在设置时通过 Web 界面创建 10 多个字段,尤其是当一个是列表时具有相当多的价值。
谁能告诉我是否有标准的方法可以做到这一点?
还有一种从现有安装中导出自定义字段的好方法吗?
您应该使用迁移脚本。将您的脚本放入#{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
正如 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 检查其存在之后,这将创建/删除类型为“文本”的自定义字段“新自定义字段”。
自定义字段基本上是作为资源实现的(但是 custom_fields 没有资源路由)。我看不出你不能只使用 CustomField.create/new 来创建插件需要的字段的原因。同样,您应该能够只使用 find() 来获取所有现有的自定义字段。但是,我不得不说我以前从未这样做过,也不知道这是否是标准方式。但是,顺便说一句,我看不出这样做有什么问题。