# 重置默认类别观看设置

**URL:** https://meta.discourse.org/t/reset-default-categories-watching-setting/244930
**Category:** Support
**Created:** [2022年十一月8日 22:15 UTC](https://meta.discourse.org/t/reset-default-categories-watching-setting/244930 "2022-11-08T22:15:21Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![ufukayyildiz](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ufukayyildiz/32/217157_2.png) [@ufukayyildiz](https://meta.discourse.org/u/ufukayyildiz)
#### Post date: [2022年十一月8日 22:15 UTC](https://meta.discourse.org/t/reset-default-categories-watching-setting/244930/1 "2022-11-08T22:15:21Z")

</div>

您好，

我试图重置所有用户的“默认类别关注”，但没有成功。

尽管在设置区域似乎没有选择任何类别，但用户的偏好中却选择了一些类别。

## ![image](https://global.discourse-cdn.com/meta/original/4X/7/5/b/75b80c91a668d515bd8f6c506ebccf49afa7e3c9.png)

 ![image](https://global.discourse-cdn.com/meta/original/4X/d/5/9/d59b88f29fc200fd7de3ab4559fc30ddc965056d.png)

---

<div class="post-metadata">

### Author: ![mononym](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mononym/32/566879_2.png) [@mononym](https://meta.discourse.org/u/mononym)
#### Post date: [2025年一月8日 18:58 UTC](https://meta.discourse.org/t/reset-default-categories-watching-setting/244930/3 "2025-01-08T18:58:17Z")

</div>

你好 @ufukayyildiz

你是否找到了处理此问题的办法？我在尝试同样操作时也遇到了一些麻烦，结果完全无法工作 ^^ 参见 [Members not receiving emails from Watched category (again)](https://meta.discourse.org/t/members-not-receiving-emails-from-watched-category-again/346093)

---

<div class="post-metadata">

### Author: ![ufukayyildiz](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ufukayyildiz/32/217157_2.png) [@ufukayyildiz](https://meta.discourse.org/u/ufukayyildiz)
#### Post date: [2025年一月31日 00:37 UTC](https://meta.discourse.org/t/reset-default-categories-watching-setting/244930/4 "2025-01-31T00:37:15Z")

</div>

还没有。

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [2025年一月31日 01:09 UTC](https://meta.discourse.org/t/reset-default-categories-watching-setting/244930/5 "2025-01-31T01:09:31Z")

</div>

我相信它的设计是为了让设置尊重用户的选择。因此，如果用户手动添加了一个类别，它就不会被覆盖。

你或许可以从 Rails 控制台做些什么，但我认为更好的方法是教育你的用户。你觉得呢？或者你是否有必须更改默认设置的特定情况？

---

<div class="post-metadata">

### Author: ![mononym](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mononym/32/566879_2.png) [@mononym](https://meta.discourse.org/u/mononym)
#### Post date: [2025年二月1日 10:29 UTC](https://meta.discourse.org/t/reset-default-categories-watching-setting/244930/6 "2025-02-01T10:29:26Z")

</div>

感谢您的回复。

如果能提供一个 Rails 控制台命令来复制用户偏好设置，我将非常感激。我完全理解用户偏好设置优先于站点设置的设计选择。但问题在于站点及其组织方式在不断发展。

在我们的案例中，我们从一个将所有公告发布为新主题的组织方式，转变为另一种组织方式：结果是首页上出现了大量未讨论的主题（仅1帖）。我注意到我早在 2023 年 2 月就开始研究这个问题了 [Unlist or archive a post when it has no reply per category](https://meta.discourse.org/t/unlist-or-archive-a-post-when-it-has-no-reply-per-category/256176?u=mononym%E3%80%82)

由于这些公告很重要并且包含截止日期，因此不能选择将它们隐藏在首页之外。所以我们迁移到了一个包含 5 个专用主题（公告类型）的组织方式，每个帖子都是一个新的公告。[^1] 同样，由于这些帖子很重要，我们尝试将类别设置为“关注”，以便实时通知用户。

这便是目前导致除了 _user\_mentioned_ 和 _digest_ 之外，没有人收到任何通知的情况的开端。如果能够重置所有用户偏好设置以使用新的站点默认设置，那么迁移将会容易得多。或者，作为另一个想法，可以将一个_虚拟_新注册用户的偏好设置复制到所有其他用户。[^2]

与此同时，我已经告知用户系统有时无法按预期工作，并且通知电子邮件将在不确定的时间内无法发送。

[^1] 在这里，能够仅启用“回复主题”将非常有帮助。  
[^2] 我可以想象这目前可以通过 Rails 实现。

---

<div class="post-metadata">

### Author: ![mononym](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mononym/32/566879_2.png) [@mononym](https://meta.discourse.org/u/mononym)
#### Post date: [2025年三月31日 14:06 UTC](https://meta.discourse.org/t/reset-default-categories-watching-setting/244930/7 "2025-03-31T14:06:35Z")

</div>

你好。我还在研究这个问题，在我们的案例中，重置用户偏好设置是有意义的，因为网站的结构已经改变，导致电子邮件通知的工作方式也发生了变化。

从 discourse AI，我得到了以下 rails 命令建议：

```ruby
UserOption.update_all(email_digests: true, email_level: 1, email_messages_level: 1)

```

你认为这能达到我们想要的效果吗？  
谢谢！

---

<div class="post-metadata">

### Author: ![mononym](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mononym/32/566879_2.png) [@mononym](https://meta.discourse.org/u/mononym)
#### Post date: [2025年四月1日 08:37 UTC](https://meta.discourse.org/t/reset-default-categories-watching-setting/244930/8 "2025-04-01T08:37:21Z")

</div>

我认为以下步骤解决了该问题！

在站点设置中，我将类别（31）设置为默认监视，追溯性地设置。  
检查：

```ruby
CategoryUser.where(category_id: 31).pluck(:user_id, :notification_level)

```

我的类别 31 的大多数用户的 `notification_level` 为 `3`。👍

现在，此更改要产生 100% 的效果还有两件事：

1. 用户的全局电子邮件偏好设置。
2. 用户在类别（31）中每个主题的通知偏好设置。

* * *

⚠ 以下行将修改您用户的个人设置。不要发生争执。

首先，为了“重新激活”用户的电子邮件，必须将用户的 `email_level` 设置为 1（即“离开时”）或 2（“始终”）：

```ruby
UserOption.update_all(email_level: 1)

```

检查：

```ruby
UserOption.group(:email_level).count

```

我得到类似 `=> {1=>X}` 的结果，其中 `X` 是用户数。

其次，主题 `notification_level` 优先于类别 `notification_level`（已在站点设置中修改）。最简单的方法是移除主题首选项。为此，只需逐个删除条目：

```ruby
TopicUser.where(topic_id: <topic_id_nr>).destroy_all

```

检查：

```ruby
TopicUser.where(topic_id: <topic_id_nr>).exists?

```

得到类似 `=> []` 的结果，这意味着没有用户具有主题偏好设置，类别 `notification_level` 将是所有用户的默认设置。

* * *

附注：不知何故，一些用户仍然没有设置类别的通知偏好设置（31）（即 `category_user` 表中没有条目）。为了确保设置了他们的 `notification_level`，必须创建一个带有 `notification_level` 值的条目：

```ruby
User.find_each do |user|
  unless CategoryUser.exists?(user_id: user.id, category_id: 31)
    CategoryUser.create!(user_id: user.id, category_id: 31, notification_level: 3)
  end
end

```

检查：

```ruby
CategoryUser.where(category_id: 31).pluck(:id, :notification_level)

```
