Je prévois de stocker des données avec un plugin, d’une seule valeur, un identifiant de sujet. Quelle est la meilleure façon de le faire ?
Merci.
Je prévois de stocker des données avec un plugin, d’une seule valeur, un identifiant de sujet. Quelle est la meilleure façon de le faire ?
Merci.
Si vous n’avez besoin de stocker qu’un seul ID de sujet (comme une valeur configurable), la manière la plus simple et native de Discourse est d’utiliser un SiteSetting.
Vous obtenez également automatiquement une interface utilisateur d’administration intégrée.
config/settings.yml :
``yml
plugins:
my_plugin_enabled:
default: true
client: false
my_plugin_topic_id:
default: 0
client: false
type: topic # vous donne un sélecteur de sujet dans l’interface d’administration
``
Dans votre code de plugin Ruby :
rb topic_id = SiteSetting.my_plugin_topic_id topic = Topic.find_by(id: topic_id)
Si vous préférez le stocker par programmation (non exposé comme un paramètre),
PluginStore convient également pour une seule paire clé-valeur :
``rb
store = PluginStore.new(“my_plugin”)
store.set(“topic_id”, some_topic_id)
topic_id = store.get(“topic_id”)
``
Je pense que PluginStore est la méthode la plus appropriée. Un paramètre de site ne conviendra pas à ce cas d’utilisation. Merci !
Votre question m’a rappelé quelque chose que j’ai lu récemment sur Meta.
J’étais sur le point de commencer - merci d’avoir soulevé ce point. Il semble que créer une table de base de données entière pour 1 valeur est excessif et complètement inutile. Des idées ?
Quelle est la raison pour laquelle vous ne voulez pas de paramètre de site ? Il pourrait être masqué pour que les administrateurs ne le voient pas, un peu comme les identifiants des sujets spéciaux dans le cœur, comme les Conditions d’Utilisation (TOS).
Mon cas d’utilisation est le suivant : tout sujet ou publication créé à partir du plugin est activé, synchronisé et stocké ailleurs. Mais les sujets précédents ne le sont pas, je dois donc exécuter une tâche pour les synchroniser, peut-être par lots de 100. J’ai besoin de stocker l’identifiant de sujet le plus bas afin que le lot suivant soit cet identifiant moins 100, et ainsi de suite.
Le chatbot fait quelque chose de très similaire.
Voici la migration :
C’est bien - au moins je ne suis pas le seul
… mon prochain obstacle est de savoir comment exécuter la migration - dans un site Discourse de développement ou autre… l’exécution de la migration n’ajouterait-elle pas simplement au répertoire des migrations de Discourse ? Dois-je copier le fichier manuellement ? Merci.
Vous le placez, comme pour toutes les migrations de plugins, dans le plugin (tout comme Chatbot ci-dessus).
Vous exécutez les migrations avec LOAD_PLUGINS=1 rake db:migrate
Lisez tout sur les migrations ici :
La seule chose que je ne comprends pas, c’est que je suis censé écrire la minute et la seconde manuellement lorsque je crée le fichier ?
Lisez le guide. Pas convaincu que vous l’ayez lu au-delà de la section 1. ![]()