我刚刚意识到,要么是我对创建编辑通知的情况理解不够全面,要么这是一个比我想象中更普遍的问题。
主要假设
如果用户 A 编辑了用户 B 撰写的内容,会发生以下几件事:
post_revisions表中会添加一行新记录。user_actions表中会添加一行新记录,其中action_type = 11。- 通过访问
/u/userB/notifications/edits,用户 B 将能够看到用户 A 进行的编辑(这依赖于user_actions)。 - 通过点击帖子中的铅笔图标,用户 B 将能够查看用户 A 执行的具体编辑内容(这依赖于
post_revisions)。
测试
如果上述假设正确,以下查询应显示 post_revisions 表中由用户 B(在此例中为 ID 259)创建的所有帖子记录,这些帖子被任何用户(除其本人或系统用户外)编辑过,并包含 user_actions 表中对应的 action_type = 11 的记录。
with my_user_posts as (
select
p.id,
p.user_id
from
posts p
where
p.user_id = 259 -- 选择一个用户 ID
)
select
up.user_id as my_user_id,
ua.user_id as target_user_id,
pr.post_id,
ua.target_post_id,
pr.user_id as editor_user_id,
ua.acting_user_id,
ua.action_type,
pr.created_at as edit_created_at,
ua.created_at as action_created_at
from
post_revisions pr
inner join my_user_posts up on up.id = pr.post_id
and up.user_id != pr.user_id -- 排除自我编辑
and pr.user_id != -1 -- 排除系统编辑
left join user_actions ua on ua.target_post_id = pr.post_id
and ua.action_type = 11 -- 仅编辑操作
order by
pr.post_id,
pr.created_at;
预期输出
每一行都应同时包含 post_revisions 数据和 user_actions 数据。
实际输出
部分 post_revisions 记录没有匹配的 user_actions 数据。因此,用户可以通过点击每个帖子中的铅笔图标查看修订记录,但并未收到关于多次编辑的通知。
我已尝试的操作
- 对一条没有
user_action数据的旧帖子添加额外编辑。结果:user_action数据也未出现。 - 创建一个假用户,复制没有
user_action数据的帖子的编辑前内容,用该内容创建新帖子,并应用与其他用户相同的编辑操作。结果:user_action数据正确出现。 - 重复上述操作,分别测试用户在线和离线状态。结果:无变化。
- 重复上述操作,修改编辑宽限期。结果:无变化。
结论
-
该问题似乎不是:
- 用户特定的。几乎每个用户都会遇到。
- 连接特定的。用户在线或离线状态不影响结果。
- 时间特定的。修改编辑宽限期没有效果。
-
该问题似乎与以下因素相关:
- 操作特定。我尚未发现其他操作(如 LIKE、WAS_LIKED、RESPONSE、REPLY、MENTION 或 QUOTE)的通知存在问题。唯一的问题是 EDIT 操作。
- 帖子特定。并非所有帖子都会出现此问题,仅特定帖子(看似随机)会受影响。
-
一种可能性是,在创建某些特定帖子时,某种机制阻止了 EDIT
user_actions的保存,但我不知道具体原因。 -
也有可能是按设计如此,即在特定条件下用户不会收到编辑通知,但我尚未在任何文档中看到相关说明。
后续步骤
- 如果您知道为什么编辑通知可能不会在每次编辑时都被触发,请告知我。
- 如果您有自己的 Discourse 实例,能否在某些用户 ID 上运行上述 SQL 查询,查看是否也出现
user_actions数据缺失的情况,并反馈结果?
