Automatando a criação de campo personalizada em Redmine
-
20-09-2019 - |
Pergunta
Eu quero escrever um plugin para redmine que dependerá de alguns Os campos personalizados, então eu gostaria de criar os campos personalizados automaticamente. Idealmente no código do plug -in, ou se não for um script, posso executar quando instalar o plug -in - eu realmente não quero criar mais de 10 campos através da interface da web quando eu configurei isso, especialmente quando se é uma lista com alguns valores.
Alguém pode me dizer se existem maneiras padrão de fazer isso?
Também existe uma boa maneira de exportar os campos personalizados de uma instalação existente?
Solução
Você deve usar scripts migrados. Coloque seus scripts em #{PLUGIN_ROOT}/db/migrate
e ligue .create
lá. As fontes Redmine contêm muitos scripts semelhantes.
Por exemplo, o script pode ter um nome: 001_populate_custom_fields.rb
.
Contente:
class PopulateCustomFields < ActiveRecord::Migration
def self.up
CustomField.create ...
end
def self.down
end
end
Outras dicas
Os campos personalizados são essencialmente implementados como um recurso (no entanto, não há rota de recursos para o Custom_Fields). Não vejo uma razão pela qual você não possa usar apenas o CustomField.create/novo para criar os campos que suas necessidades de plug -in. Da mesma forma, você poderá usar apenas find () para obter todos os campos personalizados existentes. No entanto, devo dizer que nunca fiz isso antes e não sei se essa é a maneira padrão. Mas, fora da mão, não vejo nada de errado em fazê -lo dessa maneira.
Como Andriy Lesyuk respondeu, coloque seu script em #{PLUGIN_ROOT}/db/migrate
e teste -o usando o comando para instalar/desinstalar seu plug -in.
Para instalar o plug -in, use o comando:
rake redmine:plugins:migrate
E para desinstalá -lo:
rake redmine:plugins:migrate NAME=<your plugin name> VERSION=0
Verifique o funcionário documentação para mais detalhes.
Por exemplo, o script 001_populate_custom_fields.rb
Pode ser algo como:
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
Isso criará/removerá o campo personalizado "um novo campo personalizado" do tipo "texto", depois de verificar sua existência no Redmine Database Tabela Custom_fields.