Remover o título da URL quebra os links

All three of the following links are to the second post in this topic. However, only the first two work. The third one worked until very recently, and we use it pretty extensively in our community to avoid cluttering wiki posts that reference several posts within the topic. That third link now just loads endlessly and never actually shows the content.

[full title link](https://meta.discourse.org/t/link-to-post-within-same-topic-doesnt-work-if-there-is-no-title-in-the-url/121455/2)
full title link

[short title link](https://meta.discourse.org/t/short/121455/2)
short title link

[no title link](https://meta.discourse.org/t/121455/2)
no title link


P.S. Sorry about not using try.discourse.com earlier. I’ll create an account over there for next time.

Second post to demonstrate the bug.

What you’re actually using there is a hack, especially if it is a deep link to a specific post. This is the correct permalink URL form

https://meta.discourse.org/t/{title}/{topic-id}/{post-id}

This has been hacked up to work, when people accidentally omit the topic ID, we guess that if the “topic title” is all numeric, they meant the topic ID:

https://meta.discourse.org/t/{topic-id}

So this works

https://meta.discourse.org/t/121455

but this cannot, for what I hope are obvious reasons

https://meta.discourse.org/t/topic-title

But adding the post number to that is riskier.

I recommend not relying on sort of hacky undocumented behaviors, though, and switching to this formally supported form

https://meta.discourse.org/t/x/121455/2

The third link does work if you open it in a new tab. It’s only when you click within one tab that it breaks. And it breaks bad - you can’t even click the logo to go back to the front page of the forum.

TypeError: Cannot read property 'get' of undefined
    at n.setupController (application-779d3dc401b01d1322f0bf8b26cb0e5f4c83a62f26cbecbd52159a94370dffc3.br.js:68)
    at n.a.setup (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:8)
    at i (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.routeEnteredOrUpdated (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.setupContexts (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.finalizeTransition (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17
    at f (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at T (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at E (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)

Error while processing route: topic.fromParams Cannot read property 'get' of undefined TypeError: Cannot read property 'get' of undefined
    at n.setupController (https://d11a6trkgmumsb.cloudfront.net/assets/application-779d3dc401b01d1322f0bf8b26cb0e5f4c83a62f26cbecbd52159a94370dffc3.br.js:68:14673)
    at n.a.setup (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:8:6889)
    at i (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:23930)
    at u.n.routeEnteredOrUpdated (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:24069)
    at u.n.setupContexts (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:23260)
    at u.n.finalizeTransition (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:22253)
    at https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:21378
    at f (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:29538)
    at T (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:30915)
    at E (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:30814)

Uncaught TypeError: Cannot read property 'cancelFilter' of undefined
    at n.deactivate (application-779d3dc401b01d1322f0bf8b26cb0e5f4c83a62f26cbecbd52159a94370dffc3.br.js:68)
    at n [as deactivate] (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:10)
    at n.a.exit (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:8)
    at u.n.setupContexts (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.getTransitionByIntent (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.transitionByIntent (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.doTransition (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.intermediateTransitionTo (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at n.s.intermediateTransitionTo (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:8)
    at n.a.intermediateTransitionTo (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:8)

Yep, it’s being treated like a permalink redirect and they’re not supported for internal links.

Unfortunately we had no way of knowing that this wasn’t officially supported behavior. As far as we were concerned, it worked. So we used it. I’ll try to let people know not to use that approach from now on, but unfortunately that doesn’t help us now when we have hundreds of these floating around.

As @Dannii said, it only breaks when it’s clicked to load in the same tab, and pretty badly. Even if it’s only really supported for when people do this by accident, doesn’t that still mean it should be fixed? Especially since it works when the topic is different.

Você pode pesquisar suas publicações por URLs que correspondam a uma expressão regular. Pelo que sei, basta especificar qualquer coisa no campo de título; não precisa ser o título em si, mas é necessário que algum valor seja fornecido.

Você pode especificar qualquer coisa para o título, sim. No entanto, não é tão simples quanto encontrar minhas postagens. Tornou-se uma prática comum em parte da nossa comunidade remover o título completamente para evitar URLs muito longas. Assim, vários usuários teriam que corrigir todos os seus links.

Por que isso foi movido para suporte? Ter a página carregando infinitamente é claramente um bug, mesmo que a correção não faça com que URLs sem título voltem a funcionar. E o fato de funcionar às vezes (links para diferentes postagens; acesso direto à URL na barra de endereços) mas não neste caso não faz muito sentido, na minha opinião.

Por ser algo que precisa ser corrigido devido a um uso não intencional, isso nunca foi algo suportável. Um bug é uma funcionalidade que parou de funcionar, o que não é o caso aqui.

Também atualizei o título para refletir o que realmente aconteceu: links não são criados sem um título. Isso ocorreu porque os links foram inseridos manualmente ou tiveram seus títulos removidos. O Discourse não é a fonte do problema de forma alguma, portanto, não se trata de um bug do Discourse.

Você pode identificar todos os links quebrados de uma só vez consultando seu banco de dados. Seus usuários não precisam voltar e corrigi-los manualmente, mas você definitivamente precisa reorientá-los para evitar que isso aconteça no futuro.

Não sou administrador, então, infelizmente, não posso fazer isso.

Então é aceitável que a página fique carregando para sempre? Até mesmo redirecionar para uma página 404 faria mais sentido do que isso.

Isso não resolveria o seu problema, certo?

A longo prazo, eles precisam corrigir seus links, pois o que estavam fazendo era basicamente um hack não suportado.

Como disse, apenas o ID do tópico é de fato uma forma oficialmente suportada (para cobrir o caso de “ops, esqueci o título”), mas ID do tópico mais ID da postagem não é.

O que você acha, @eviltrout, sobre como o comportamento deve ser (veja o terceiro link na primeira postagem)?

Ah, isso é interessante. Qual é o raciocínio para tratá-los de forma diferente? Não é o caso de que as pessoas ainda esquecem o título, mas se importam com uma postagem específica?

É um hack bastante ruim, pois estamos tratando texto como numérico. Basicamente, é uma válvula de escape do tipo “nossa, o usuário está realmente confuso, acho que faremos o melhor que pudermos”. Não foi concebido como um método de navegação primário que as pessoas devam confiar, especialmente quando IDs de postagens também estão envolvidos.

A detecção ocorre apenas ao clicar no link? Poderíamos detectá-la quando o post é gerado e aplicar uma classe a qualquer link malformado estranho?

Se isso é tão importante para sua comunidade, por que os administradores não estão discutindo isso aqui? São eles que, no final, precisarão aplicar qualquer correção.

É interessante que o lado do servidor lide com isso. Existe uma rota específica para /t/:topic_id/:post_number.

A correspondência ocorre apenas quando topic_id e post_number são numéricos. Nesse caso, ele buscará o slug correto do tópico e redirecionará para lá.

Como isso é suportado no lado do servidor, acho que deveríamos ter suporte também no lado do cliente. Não faz sentido mostrar uma página de erro quando podemos fazer uma consulta AJAX para obter o slug correto e exibi-lo. Dito isso, eu desencorajaria as pessoas a usar esses links, pois essa consulta extra representa uma requisição web adicional por um motivo praticamente inútil.

Eu acabei de notar e por isso mencionei. É uma comunidade muito descontraída, então tento envolver os administradores apenas quando é realmente importante. Sou muito ativo na comunidade, especialmente no subgrupo que seria mais afetado por essa mudança.

Hack, acidental ou não, acho que esse bug precisa ser corrigido. Agora que isso foi revelado, trolls podem criar esses links intencionalmente. Lembre-se: não é apenas que o tópico não carrega, isso quebra todo o site.

Aqui, confira meu novo jogo!

Não realmente, já que você pode pressionar o botão voltar.

Você gostaria de atribuir essa tarefa a alguém, @eviltrout?

Não funciona para mim…

Depois de clicar em um link ruim, todos esses deixam de funcionar:

  • clicar no botão voltar do navegador
  • clicar no logotipo
  • clicar no título do tópico
  • pesquisar
  • clicar em Recentes/Não lidos/Tags etc no menu hambúrguer

A única coisa que descobri que funciona é clicar em uma notificação. Ou atualizar a página.