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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top