# api.addSaveableUserOptionField 是做什么用的？

**URL:** https://meta.discourse.org/t/what-does-api-addsaveableuseroptionfield-do/381049
**Category:** Development
**Tags:** plugin-api
**Created:** [2025年八月31日 07:54 UTC](https://meta.discourse.org/t/what-does-api-addsaveableuseroptionfield-do/381049 "2025-08-31T07:54:43Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [2025年八月31日 07:54 UTC](https://meta.discourse.org/t/what-does-api-addsaveableuseroptionfield-do/381049/1 "2025-08-31T07:54:43Z")

</div>

几乎没有关于此的文档，并且插件 API 文件没有注释来解释此函数的使用。此外，我唯一能看到它使用的地方是在插件中，而不是在核心中。那么 `api.addSaveableUserOptionField()` 具体是做什么的？使用它是否需要额外的配置？

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2025年八月31日 16:00 UTC](https://meta.discourse.org/t/what-does-api-addsaveableuseroptionfield-do/381049/3 "2025-08-31T16:00:55Z")

</div>

我不知道，但这是我发现的。\n\n但首先——我的问题是，你为什么关心？你想做什么吗？但也许如果你想创建一个具有用户选项的插件，这就是如何做到。它不用于核心，因为它是一个钩子，特别是供插件拥有自己的用户选项。\n\n[quote="NateDhaliwal, post:1, topic:381049"]\naddSaveableUserOptionField\n[/quote]\n\n看起来它在 Chat 插件中使用，就像这样：\n\n[discourse/plugins/chat/assets/javascripts/discourse/initializers/chat-user-options.js at main · discourse/discourse · GitHub](https://github.com/discourse/discourse/blob/main/plugins/chat/assets/javascripts/discourse/initializers/chat-user-options.js#L22-L32%5Cn%5Cn%E7%9C%8B%E8%B5%B7%E6%9D%A5%E5%A6%82%E6%9E%9C%E4%BD%A0%E7%9A%84%E6%8F%92%E4%BB%B6%E6%9C%89%E7%94%A8%E6%88%B7%E9%80%89%E9%A1%B9%EF%BC%8C%E4%BD%A0%E5%B0%B1%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E5%AE%83%E6%9D%A5%E5%BB%BA%E7%AB%8B%E5%AE%83%E6%98%AF%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7%E9%80%89%E9%A1%B9%EF%BC%8C%E4%BD%BF%E7%94%A8) `UserUpdater`。\n\n[discourse/plugins/chat/plugin.rb at main · discourse/discourse · GitHub](https://github.com/discourse/discourse/blob/main/plugins/chat/plugin.rb#L56-L66)

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [2025年八月31日 23:18 UTC](https://meta.discourse.org/t/what-does-api-addsaveableuseroptionfield-do/381049/4 "2025-08-31T23:18:16Z")

</div>

是的，我计划在一个插件中设置用户设置。我之前看到聊天和AI（我没记错的话）使用了此功能来添加用户设置，所以我想知道是否有文档记录了实现方法。

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [2026年二月9日 08:16 UTC](https://meta.discourse.org/t/what-does-api-addsaveableuseroptionfield-do/381049/5 "2026-02-09T08:16:43Z")

</div>

回到这个问题，这里似乎有更多信息。

> <https://github.com/discourse/discourse/blob/main/frontend/discourse/app/lib/plugin-api.gjs#L2085-L2192>

这现在列出了 3 个函数：`addSaveableUserField()`, `addSaveableUserOption()`, 和 `addSaveableCustomFields()`。

第一个似乎是指添加和保存管理员定义的自定义用户字段。然而，后两个不太清楚。它们是否需要一个插件才能在后端使用 `register_custom_user_field :...`？是否需要做更多的事情，还是可以在主题组件（TC）中使用？

谢谢。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2026年二月9日 17:00 UTC](https://meta.discourse.org/t/what-does-api-addsaveableuseroptionfield-do/381049/6 "2026-02-09T17:00:44Z")

</div>

看起来它适用于通过用户体验（UX）添加的自定义字段和通过插件添加的自定义字段。对于自定义字段，我相当确定它们的名称类似于 `user_field_1`。例如，您可以使用数据浏览器（[data explorer](https://meta.discourse.org/t/32566?silent=true)）查看表。或者，它可能只意味着通过用户体验（UX）添加的字段（“管理员定义的个人资料字段”），在这种情况下，您将使用创建它时给它的名称。我建议两种方法都试试。

而且 GitHub 宕机了，所以我无法在那里查看代码。
