Estou planejando armazenar dados com um plugin, de literalmente 1 valor, um ID de tópico. Qual é a melhor maneira de fazer isso?
Obrigado.
Estou planejando armazenar dados com um plugin, de literalmente 1 valor, um ID de tópico. Qual é a melhor maneira de fazer isso?
Obrigado.
Se você só precisa armazenar um único ID de Tópico (como um valor configurável), a maneira mais simples nativa do Discourse é usando uma SiteSetting (Configuração do Site).
Você também obtém uma interface de administração integrada automaticamente.
config/settings.yml:
plugins:
my_plugin_enabled:
default: true
client: false
my_plugin_topic_id:
default: 0
client: false
type: topic # fornece um seletor de tópico na interface de administração
No seu código de plugin Ruby:
topic_id = SiteSetting.my_plugin_topic_id
topic = Topic.find_by(id: topic_id)
Se você preferir armazená-lo programaticamente (não exposto como uma configuração), o PluginStore também serve para um único par chave-valor:
store = PluginStore.new("my_plugin")
store.set("topic_id", some_topic_id)
topic_id = store.get("topic_id")
Eu acho que o PluginStore é a maneira mais adequada. Uma configuração do site não se encaixará neste caso de uso. Obrigado!
Sua pergunta me lembrou de algo que li recentemente na Meta.
Eu estava prestes a começar - obrigado por levantar isso. Parece que criar uma tabela de banco de dados inteira para 1 valor é exagero e completamente desnecessário. Alguma ideia?
Qual é o motivo pelo qual você não quer uma configuração de site? Ela poderia ser oculta para que os administradores não a vejam, de forma semelhante aos IDs para os tópicos especiais no núcleo, como o TOS.
Meu caso de uso é este: qualquer tópico ou postagem criada a partir do plugin ativado é sincronizada e armazenada em outro lugar. Mas os tópicos anteriores a isso não são, então preciso executar um trabalho para sincronizá-los, talvez em lotes de 100. Preciso armazenar o menor ID de tópico para que o próximo lote seja esse menos 100, e assim por diante.
O Chatbot faz algo muito semelhante.
Aqui está a migração:
Isso é bom - pelo menos eu não sou o único
… meu próximo obstáculo é como executar a migração - em um site Discourse de desenvolvimento ou outra coisa… a execução da migração não adicionaria apenas ao diretório de migrações do Discourse? Devo copiar o arquivo manualmente? Obrigado.
Você o coloca, como em todas as migrações de plugins, no plugin (assim como o Chatbot acima).
Você executa as migrações com LOAD_PLUGINS=1 rake db:migrate
Leia sobre migrações aqui:
A única coisa que não entendi é que devo escrever o minuto e o segundo manualmente ao criar o arquivo?
Leia o guia. Não estou convencido de que você leu além da seção 1. ![]()