Was ist der beste Weg, Daten mit einem Plugin zu speichern?

Ich plane, Daten mit einem Plugin zu speichern, nämlich genau einen Wert, eine Topic-ID. Was ist der beste Weg, dies zu tun?

Danke.

Wenn Sie nur eine einzelne Topic-ID speichern müssen (wie einen konfigurierbaren Wert), ist der einfachste Discourse-native Weg die Verwendung einer SiteSetting.
Sie erhalten außerdem automatisch eine integrierte Admin-Benutzeroberfläche.

config/settings.yml:

plugins:
  my_plugin_enabled:
    default: true
    client: false

  my_plugin_topic_id:
    default: 0
    client: false
    type: topic      # erstellt einen Themenwähler in der Admin-Benutzeroberfläche

In Ihrem Ruby-Plugin-Code:

topic_id = SiteSetting.my_plugin_topic_id
topic = Topic.find_by(id: topic_id)

Wenn Sie es vorziehen, es programmatisch zu speichern (nicht als Einstellung verfügbar gemacht), ist PluginStore ebenfalls für ein einzelnes Schlüssel-Wert-Paar geeignet:

store = PluginStore.new("my_plugin")
store.set("topic_id", some_topic_id)

topic_id = store.get("topic_id")
3 „Gefällt mir“

Ich denke, der PluginStore ist der am besten geeignete Weg. Eine Website-Einstellung passt nicht zu diesem Anwendungsfall. Danke!

1 „Gefällt mir“

Ihre Frage erinnerte mich an etwas, das ich kürzlich auf Meta gelesen habe.

2 „Gefällt mir“

Ich wollte gerade anfangen – danke, dass Sie das zur Sprache gebracht haben. Es scheint, als wäre eine ganze Datenbanktabelle für 1 Wert übertrieben und völlig unnötig. Irgendwelche Ideen?

1 „Gefällt mir“

Was ist der Grund, warum Sie keine Website-Einstellung wünschen? Sie könnte verborgen werden, sodass Administratoren sie nicht sehen, ähnlich wie die IDs für die speziellen Themen im Kern, wie z. B. TOS.

Mein Anwendungsfall ist folgender: Jedes Thema oder jeder Beitrag, der mit dem Plugin erstellt wird, wird synchronisiert und an anderer Stelle gespeichert. Themen, die davor erstellt wurden, werden dies jedoch nicht, daher muss ich einen Job ausführen, um diese zu synchronisieren, vielleicht in Stapeln von 100. Ich muss die niedrigste Themen-ID speichern, damit der nächste Stapel diese minus 100 ist und so weiter.

Der Chatbot macht etwas sehr Ähnliches.

Hier ist die Migration:

3 „Gefällt mir“

Das ist gut – zumindest bin ich nicht der Einzige :laughing:… meine nächste Hürde ist, wie ich die Migration ausführe – in einer Dev-Discourse-Seite oder etwas anderem… würde die Ausführung der Migration dann nicht einfach zum Discourse-Migrationsverzeichnis hinzugefügt werden? Soll ich die Datei manuell kopieren? Danke.

Sie platzieren es, wie bei allen Plugin-Migrationen, im Plugin (genau wie beim Chatbot oben).

Sie führen Migrationen mit LOAD_PLUGINS=1 rake db:migrate aus

Lesen Sie hier mehr über Migrationen:

2 „Gefällt mir“

Ich verstehe nur nicht, dass ich die Minute und Sekunde manuell eingeben soll, wenn ich die Datei erstelle?

Lesen Sie die Anleitung. Nicht überzeugt, dass Sie sie über Abschnitt 1 hinaus gelesen haben. :wink:

1 „Gefällt mir“