Автоматизация создания пользовательских полей в Redmine
-
20-09-2019 - |
Вопрос
Я хочу написать плагин для redmine, который будет зависеть от многих пользовательские поля, поэтому я хотел бы автоматически создавать пользовательские поля.В идеале в коде плагина или, если не с помощью скрипта, который я могу запустить при установке плагина - я действительно не хочу создавать более 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
Другие советы
Пользовательские поля, по сути, в значительной степени реализованы как ресурс (однако для custom_fields нет маршрута ресурса).Я не вижу причины, по которой вы не могли бы просто использовать CustomField.create / new для создания полей, необходимых вашему плагину.Аналогично, вы должны иметь возможность просто использовать find() для получения всех существующих пользовательских полей.Однако я должен сказать, что я никогда не делал этого раньше и не знаю, является ли это стандартным способом.Но, с другой стороны, я не вижу ничего плохого в том, чтобы сделать это таким образом.
Как ответил Андрей Лесюк, разместите свой сценарий под #{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.