回调数据结构:category_id 与 category_slug

我可能理解有误,但看起来 ‘post’ 回调返回的数据包含 category_slug,却没有 category_id;而 ‘topic’ 回调返回的数据包含 category_id,却没有 category_slug

如果是这种情况(且我没有遗漏任何配置),那么希望这两个回调能统一使用 category_idcategory_slug,或者同时返回两者。

此外,如果来自子分类的帖子或话题,两个回调类型最好都能提供 parent_category_idparent_category_slug。目前两者都只提供 category_id,无法区分该分类是主分类还是子分类。

1 个赞

是否计划更新 Webhook,使其无论针对的是“帖子”还是“主题”,都始终同时包含 category_id category_slug?

当前的“帖子”回调信息不够理想,因为无法可靠地确定其所属类别……因为(如果我理解正确的话)category_slug 不必是唯一的。如果您有几个不同的类别,每个类别下都有三个具有相同 slug 的子类别(因为您需要子类别导航对用户看起来一致),那么仅凭 slug 就无法判断“帖子”是在哪个子类别中发布的。

我不是 Ruby 开发者,但我怀疑 post_serializer 类中是否存在一个 bug:

def include_category_id?
    @add_title
  end

这是否应该是:

def include_category_id?
    topic&.category_id.present?
end

我提交了一个 PR 来展示这一更改。这听起来可能有些疯狂,但或许有助于找到真正的解决方案……

https://github.com/discourse/discourse/compare/master...danielmcquillen:master

2 个赞

或者,如果 post_serializer 没有问题,而是 post 类型的 Webhook 没有返回 category_id……

是否可以在 web_hook_post_serializer.rb 中添加以下代码:

  def include_category_id?
    true
  end

(就像已经存在一个类似的 include_topic_title? 方法一样)……

遗憾的是,由于我们在 Discourse 上使用的是付费托管账户,我们无法自行进行这些更改。

是的,这可行。我已经添加了:

作为托管客户,您将在下次部署论坛时获得此更新。

6 个赞