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

Возможно, я ошибаюсь, но похоже, что данные, возвращаемые колбэком ‘post’, содержат category_slug, но не содержат category_id, тогда как данные от колбэка ‘topic’ имеют category_id, но не имеют category_slug.

Если это так (и я не упустил какую-либо настройку), было бы здорово, если бы оба колбэка стандартизировались на использовании либо category_id, либо category_slug, либо возвращали бы оба поля.

Также было бы превосходно, если бы оба типа включали parent_category_id и parent_category_slug в случае, если запись или тема находится в подкатегории. В настоящее время оба возвращают category_id, что не указывает, является ли это категорией или подкатегорией.

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 лайков