Почему числовые теги не работают в композере, если ID существует

Когда я пытаюсь создать числовой тег, например 2026, это работает, если нет тега с тем же идентификатором 2026. Если этот идентификатор уже используется, я получаю существующий тег вместо 2026.

Я почти уверен, что это старая ошибка, которая когда-то была исправлена. Или мне кажется, и вообще не стоит использовать числовые теги? :thinking:

В любом случае, я считаю это ошибкой — и очень хочу использовать годы в качестве тегов.

Числовые теги должны поддерживаться, и текущий канонический формат URL предназначен для устранения этой неоднозначности.

Например, если тег называется 2026, а его идентификатор (ID) равен 3, то канонический URL должен выглядеть так:

/tag/2026/3

Неоднозначным является старый/устаревший формат URL:

/tag/2026

Его можно интерпретировать как «тег с ID 2026», поэтому, если существует другой тег с таким ID, ссылка может вести на него, а не на тег с именем 2026.


Где вы пытаетесь использовать или получить доступ к тегу? Если ссылка генерируется самим Discourse, я ожидаю, что будет использоваться канонический URL формата /tag/:slug/:id. Если вы вводите URL вручную, используете старую сохранённую ссылку, ссылку из пользовательской темы/плагина или импортированный/боковой/пользовательский URL, то он может по-прежнему использовать неоднозначный устаревший формат и вести на неправильный тег.

По возможности, я думаю, мы должны рассматривать :foo в /tag/:foo как всегда являющийся слаг, и требовать формат /tag/:foo/:id для идентификаторов, где :foo может быть любым символом (например, использовать -, когда вы не знаете или вам все равно).

Это поможет для обратной совместимости, а также в случаях, когда слаг известен, но идентификатор нет, что часто бывает с тегами, где имя является обычно используемой ссылкой.

Идентификаторы сейчас в основном нужны для поддержки локализации.

1 лайк

Обычно при создании темы и добавлении тегов. Или, точнее, просто при добавлении тега.

Пример из реальной жизни.

При написании темы я попытался создать тег 2013. Но получил sahara, так как это /tag/sahara/2013.

И да, как я спрашивал ранее :smirking_face:, то же самое происходит и в безопасном режиме.

Итак,

Это верно, и так обстояло дело совсем недавно.

2 лайка

Спасибо за конкретный пример. Мне удалось воспроизвести проблему, и я работаю над её исправлением.

Во время тестирования я заметил, что числовые теги также не создаются, если у них нет соответствующего идентификатора. (например, попытка создать тег 2939858339 не приведёт ни к чему, и тема не будет помечена ни одним тегом)

2 лайка