¿Cuál es la mejor manera de almacenar datos con un plugin?

Estoy planeando almacenar datos con un complemento, de literalmente 1 valor, un ID de tema. ¿Cuál es la mejor manera de hacerlo?

Gracias.

Si solo necesita almacenar un único ID de Tema (como un valor configurable), la forma más sencilla nativa de Discourse es usar un SiteSetting.
Además, obtendrá automáticamente una interfaz de administración integrada.

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

my_plugin_topic_id:
default: 0
client: false
type: topic # proporciona un selector de temas en la interfaz de administración
``

En su código de complemento Ruby:
rb topic_id = SiteSetting.my_plugin_topic_id topic = Topic.find_by(id: topic_id)

Si prefiere almacenarlo programáticamente (no expuesto como una configuración),
PluginStore también es adecuado para una única clave-valor:

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

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

3 Me gusta

Creo que PluginStore es la forma más adecuada. Una configuración del sitio no se ajustará a este caso de uso. ¡Gracias!

1 me gusta

Tu pregunta me recordó algo que leí recientemente en Meta.

2 Me gusta

Estaba a punto de empezar, gracias por sacar esto a colación. Parece que crear una tabla de base de datos completa para 1 valor es excesivo y completamente innecesario. ¿Alguna idea?

1 me gusta

¿Cuál es la razón por la que no quieres una configuración del sitio? Podría ocultarse para que los administradores no la vean, de forma similar a las ID de los temas especiales en el núcleo, como los Términos de Servicio (TOS).

Mi caso de uso es el siguiente: cualquier tema o publicación creada desde que el complemento está habilitado se sincroniza y almacena en otro lugar. Pero los temas anteriores no lo están, así que tengo que ejecutar un trabajo para sincronizarlos, quizás en lotes de 100. Necesito almacenar el ID de tema más bajo para que el siguiente lote sea ese menos 100, y así sucesivamente.

El chatbot hace algo muy similar.

Aquí está la migración:

3 Me gusta

Eso es bueno, al menos no soy el único :laughing:… mi próximo obstáculo es cómo ejecutar la migración, ¿en un sitio de desarrollo de Discourse o en otra cosa…? ¿no añadiría la ejecución de la migración al directorio de migraciones de Discourse? ¿Debería copiar el archivo manualmente? Gracias.

Lo colocas, como en todas las migraciones de plugins, en el plugin (igual que Chatbot arriba).

Ejecutas las migraciones con LOAD_PLUGINS=1 rake db:migrate

Lee sobre migraciones aquí:

2 Me gusta

Lo único que no entiendo es que se supone que debo escribir el minuto y el segundo manualmente al crear el archivo, ¿verdad?

Lee la guía. No estoy convencido de que la hayas leído más allá de la sección 1. :wink:

1 me gusta