我计划使用插件存储数据,该数据只有一个值,即主题 ID。实现此目的的最佳方法是什么?
谢谢。
我计划使用插件存储数据,该数据只有一个值,即主题 ID。实现此目的的最佳方法是什么?
谢谢。
如果您只需要存储单个主题 ID(如可配置值),最简单的 Discourse 原生方法是使用 SiteSetting。
您还会自动获得一个内置的管理员界面。
config/settings.yml:
``yml
plugins:
my_plugin_enabled:
default: true
client: false
my_plugin_topic_id:
default: 0
client: false
type: topic # 在管理员界面中为您提供一个主题选择器
``
在您的 Ruby 插件代码中:
rb topic_id = SiteSetting.my_plugin_topic_id topic = Topic.find_by(id: topic_id)
如果您更喜欢以编程方式存储它(不作为设置公开),
PluginStore 对于单个键值对也是可以的:
``rb
store = PluginStore.new(“my_plugin”)
store.set(“topic_id”, some_topic_id)
topic_id = store.get(“topic_id”)
``
我认为 PluginStore 是最合适的方式。站点设置不适合此用例。谢谢!
您的提问让我想起了我最近在 Meta 上读到的内容。
我正准备开始——感谢您提出这个问题。似乎为一个值创建一个完整的数据库表是矫枉过正的,而且完全没有必要。有什么想法吗?
你不希望设置站点设置的原因是什么?它可以被隐藏,这样管理员就看不到它了,就像核心中特殊主题的 ID 一样,例如 TOS(服务条款)。
我的用例是:从插件创建的任何主题或帖子都已启用同步并存储在别处。但在此之前的帖子则没有,所以我必须运行一个作业来同步它们,也许是分批(每次 100 个)进行。我需要存储最低的主题 ID,这样下一个批次就是该 ID 减去 100,依此类推。
聊天机器人做的事情非常相似。
这是迁移:
那太好了——至少我不是唯一一个
… 我的下一个难点是如何运行迁移——是在一个开发中的 Discourse 站点还是其他地方……运行迁移后不会只是添加到 Discourse 的迁移目录中吗?我应该手动复制文件吗?谢谢。
您需要像所有插件迁移一样,将其放置在插件中(就像上面的聊天机器人一样)。
使用 LOAD_PLUGINS=1 rake db:migrate 运行迁移。
在此处阅读有关迁移的更多信息:
我唯一不明白的是,我创建文件时需要手动输入分钟和秒吗?
阅读指南。不相信你已经读完了第一部分之后的内容。![]()