我想为redmine编写一个依赖于很多custom fields的插件,所以我想自动创建自定义字段。理想情况下,在插件代码中,或者如果不是脚本,我可以在安装插件时运行 - 我真的不希望在设置它时通过Web界面创建10个以上的字段,尤其是当一个列表时有很多价值观。
有人能告诉我是否有标准的方法吗?
还有一种从现有安装中导出自定义字段的好方法吗?
答案 0 :(得分:2)
您应该使用迁移脚本。将您的脚本放入#{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
答案 1 :(得分:0)
自定义字段本质上实际上是作为资源实现的(但是custom_fields没有资源路由)。我没有看到你不应该只使用CustomField.create / new来创建插件所需字段的原因。同样,您应该能够使用find()来获取所有现有的自定义字段。 但是,我不得不说我以前从未这样做过,也不知道这是否是标准方式。但是,如果这样做,我看不出有任何问题。
答案 2 :(得分:0)
正如Andriy Lesyuk回答的那样,将您的脚本放在#{PLUGIN_ROOT}/db/migrate
下并使用安装/卸载插件的命令对其进行测试。
要安装插件,请使用以下命令:
rake redmine:plugins:migrate
并卸载它:
rake redmine:plugins:migrate NAME=<your plugin name> VERSION=0
查看官方documentation了解更多详情。
例如,脚本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中检查它的存在后,这将创建/删除“text”类型的自定义字段“A New Custom Field”。