在Redmine中自动创建自定义字段

时间:2010-03-18 15:51:16

标签: ruby-on-rails plugins redmine

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

有人能告诉我是否有标准的方法吗?

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

3 个答案:

答案 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”。