Qual è il modo migliore per archiviare dati con un plugin?

Sto pianificando di memorizzare dati con un plugin, di letteralmente 1 valore, un ID argomento. Qual è il modo migliore per farlo?

Grazie.

Se devi memorizzare un solo ID argomento (Topic ID) (come un valore configurabile), il modo più semplice nativo di Discourse è utilizzare un SiteSetting.
Ottieni anche automaticamente un’interfaccia utente amministrativa integrata.

config/settings.yml:
``yml
plugins:
my_plugin_enabled:
default: true
client: false

my_plugin_topic_id:
default: 0
client: false
type: topic # fornisce un selettore di argomenti nell’interfaccia utente amministrativa
``

Nel tuo codice plugin Ruby:
rb topic_id = SiteSetting.my_plugin_topic_id topic = Topic.find_by(id: topic_id)

Se preferisci memorizzarlo programmaticamente (non esposto come impostazione),
PluginStore va bene anche per una singola coppia chiave-valore:

``rb
store = PluginStore.new(“my_plugin”)
store.set(“topic_id”, some_topic_id)

topic_id = store.get(“topic_id”)
``

3 Mi Piace

Penso che PluginStore sia il modo più adatto. Un’impostazione del sito non si adatterebbe a questo caso d’uso. Grazie!

1 Mi Piace

La tua domanda mi ha ricordato qualcosa che ho letto di recente su Meta.

2 Mi Piace

Stavo per iniziare, grazie per aver sollevato la questione. Sembra che creare un’intera tabella di database per 1 valore sia eccessivo e completamente inutile. Qualche idea?

1 Mi Piace

Qual è il motivo per cui non si desidera un’impostazione del sito? Potrebbe essere nascosta in modo che gli amministratori non la vedano, in modo simile agli ID per gli argomenti speciali nel core, come TOS.

Il mio caso d’uso è questo: qualsiasi argomento o post creato dal plugin è abilitato viene sincronizzato e memorizzato altrove. Ma gli argomenti precedenti non lo sono, quindi devo eseguire un processo per sincronizzarli, magari in lotti da 100. Ho bisogno di memorizzare l’ID dell’argomento più basso in modo che il lotto successivo sia quello meno 100, e così via.

Il chatbot fa qualcosa di molto simile.

Ecco la migrazione:

3 Mi Piace

È un bene, almeno non sono l’unico :laughing:… il mio prossimo ostacolo è come eseguire la migrazione - in un sito Discourse di sviluppo o qualcos’altro… l’esecuzione della migrazione non aggiungerebbe semplicemente alla directory delle migrazioni di Discourse? Dovrei copiare il file manualmente? Grazie.

Lo posizioni, come per tutte le migrazioni di plugin, nella cartella del plugin (proprio come Chatbot sopra).

Esegui le migrazioni con LOAD_PLUGINS=1 rake db:migrate

Leggi sulle migrazioni qui:

2 Mi Piace

L’unica cosa che non capisco è che dovrei scrivere manualmente il minuto e il secondo mentre creo il file?

Leggi la guida. Non sono convinto che tu l’abbia letta oltre la sezione 1. :wink:

1 Mi Piace