У меня вопрос: можно ли загрузить одно изображение для категории и использовать это же загруженное изображение для подкатегорий и под-подкатегорий? Ниже приведена структура:
У категорий A–D есть изображение для категории. При переходе на первый уровень отображается изображение этой категории, а при переходе на третий уровень изображение не показывается, поэтому мне приходится добавлять его вручную. К сожалению, у меня очень много категорий (не по моему выбору), так что это много работы и это расходует место на диске сервера (назовите меня старомодным, я привык работать с ресурсами, имеющими очень ограниченные возможности).
Наследование было бы первым решением. Есть ли другие способы добиться того, чтобы мне нужно было загружать изображение только один раз и, желательно, не редактировать каждую под-подкатегорию?
Обратите внимание, что я полный новичок в Discourse и в настоящее время обновляю существующий сайт на базе Discourse.
Это не так. Изображения хранятся по хешу, поэтому создаётся/хранится только одна копия, независимо от того, сколько раз оно было загружено.
Если у вас есть доступ к Rails, вы можете сделать что-то вроде этого:
parent = Category.find_by_slug('category_a');
children = Category.where(parent_category_id: parent.id);
children.update_all(uploaded_logo_id: parent.uploaded_logo_id);
Точка с запятой в конце предотвращает вывод результата в консоль Rails, так что вы можете вставить все три строки сразу. При тестировании вы можете их опустить. Обязательно сделайте резервную копию и будьте готовы её восстановить, если вы не пробовали это сначала на тестовом или staging-сервере.
Вы можете предложить вашим руководителям прочитать Пора поговорить о тегах. Или, возможно, есть веская причина для всех этих подкатегорий. Если вам не нужно ограничивать доступ к этим подкатегориям или люди не захотят следить/отключать уведомления о них, то они, скорее всего, только ухудшат ситуацию для всех (кроме того, кто получит право хвастаться, что его плохая идея была принята всей компанией).
В таком случае вы могли бы попытаться сделать что-то подобное с помощью API, но в этом случае вы действуете самостоятельно. Начните с обратного проектирования API Discourse…