2021年自定义插件数据库数据的最佳约定?

我正在构建一个以租赁房地产为主题的社区网站,其核心功能围绕特定城市的讨论展开。用户数据将包含他们熟悉的城市以及他们与这些城市的关系(例如:目前居住、曾经居住等)。此外,用户还可以订阅他们希望投资但尚不熟悉的城市。所有城市将作为分类存在,并包含一个自定义字段用于存储地理编码数据,以便用户通过地图浏览城市。

我有些犹豫的是,从数据库效率的角度来看,应该如何设计这个结构。当用户访问某个城市页面时,我会展示该城市的“成员专家”动态。如果每次渲染分类页面时都需要查询所有用户,并遍历他们的自定义字段和“专家城市”自定义字段哈希,我担心这会非常缓慢,尤其是在用户和城市数量增长的情况下。

如果我在自己的 Rails 应用中构建此功能,可以通过关联表和 has_many :through 模型关系轻松解决。但我想知道,对于一个需要关联表的插件,推荐的方案是什么?似乎自定义迁移和表是不被鼓励的,通常建议使用自定义字段或 PluginStore。我尚未找到关于 PluginStore 的正式文档,但目前正在深入研究。

在深入任何方向之前,我认为最好先了解一下 Discourse 官方推荐的做法。

谢谢 :slight_smile:
Zach

3 个赞

这在早期可能确实如此,但如今情况恰恰相反。我们甚至将自家插件从自定义字段迁移到了它们自己的表中,只要这样做有意义,例如投票插件和点赞插件。

拥有丰富数据模型的插件应创建自己的模型、表、关系和迁移。这样更易于维护,并能提供出色的性能。只需留意 N+1 查询问题 :wink:

5 个赞

啊,好的,太棒了。看来我问对了。 :wink: 有没有推荐的从插件内部修改核心模型的方法?

我想添加一些自定义的定义和关系,例如通过我的新表建立 hasManyThrough 关系,但除了在我新模型中调用函数并传入类别、用户等 ID 之外,我不太确定最佳做法是什么。

我找到了这篇帖子,但看起来他一直没有得到答案。

2 个赞

我在上面提到的 Poll 插件中有一些示例:

2 个赞

太棒了!我非常兴奋这成为可能!谢谢。

3 个赞