Автоматизация создания настраиваемых полей в Redmine - PullRequest
3 голосов
/ 18 марта 2010

Я хочу написать плагин для redmine, который будет зависеть от нескольких настраиваемых полей , поэтому я хотел бы создать настраиваемые поля автоматически. В идеале в коде плагина, или если не с помощью скрипта, который я могу запустить, когда я устанавливаю плагин - я действительно не хочу создавать более 10 полей через веб-интерфейс при настройке, особенно когда это список. с довольно несколькими значениями.

Может кто-нибудь сказать мне, есть ли стандартные способы сделать это?

Также есть ли хороший способ экспортировать пользовательские поля из существующей установки?

Ответы [ 3 ]

2 голосов
/ 03 октября 2011

Вы должны использовать сценарии переноса. Поместите ваши скрипты в #{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
0 голосов
/ 06 января 2015

Как ответил Андрей Лесюк, поместите ваш скрипт под #{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.

0 голосов
/ 18 марта 2010

Пользовательские поля, по существу, в значительной степени реализованы как ресурс (однако для custom_fields нет маршрута к ресурсу). Я не вижу причины, по которой вы не можете просто использовать CustomField.create / new для создания полей, в которых нуждается ваш плагин. Точно так же вы должны иметь возможность просто использовать find (), чтобы получить все существующие настраиваемые поля. Тем не менее, я должен сказать, что никогда не делал этого раньше и не знаю, является ли это стандартным способом. Но я не вижу в этом ничего плохого в этом.

...