Структура данных обратного вызова: category_id против category_slug

I could have this wrong, but it looks like the data returned by a ‘post’ callback has category_slug but no category_id, while the data returned by a ‘topic’ callback has a category_id but no category_slug.

If that is the case (and I’m not missing a configuration somewhere) would be nice if both callbacks standardised on either category_id or category_slug or returned both.

It would also be most excellent if both types had parent_category_id and parent_category_slug if arriving from a post or topic in a subcategory. Right now both provide category_id which doesn’t indicate whether it’s a category or subcategory.

1 лайк

Есть ли намерение обновить вебхуки так, чтобы они всегда включали как category_id, так и category_slug, независимо от того, предназначен ли вебхук для ‘поста’ или ‘темы’?

Текущая информация обратного вызова для ‘поста’ неоптимальна, поскольку нет надёжного способа определить, к какой категории он относится… (если я правильно понимаю), category_slug не обязан быть уникальным. Если у вас есть несколько разных категорий, каждая из которых содержит три подкатегории с одинаковыми слагами (потому что навигация по подкатегориям должна выглядеть для пользователя одинаково), вы не сможете определить, в какой именно подкатегории был создан ‘пост’, только по слагу.

Я не разработчик на Ruby, но мне интересно, нет ли ошибки в классе post_serializer:

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’ не возвращают category_id…

неужели в файл web_hook_post_serializer.rb нельзя добавить следующий код:

  def include_category_id?
    true
  end

(Точно так же, как там уже есть аналогичный метод include_topic_title?)…

К сожалению, мы не можем внести эти изменения самостоятельно, так как у нас платный хостинг-аккаунт на Discourse.

Да, это работает. Я добавил это:

Как хостинговый клиент, вы получите это при следующем развёртывании вашего форума.

6 лайков