Pular para o conteúdo
Development

Adicionando links dos posts ao vivo no painel

Por Victor Da Luz
railsrubydev-logblog-manager

É uma coisa pequena, mas eu vivia esbarrando nela: o painel /posts lista todos os meus posts do blog, e toda vez que eu queria ler um no blog de verdade, tinha que navegar até ele manualmente. Os títulos eram só texto simples. A ação natural, clicar no título, não fazia nada.

A correção parece óbvia: transformar o título em link. Mas tem uma pegadinha. O padrão de URL não é o mesmo para todos os blogs. Minha tabela blogs já tinha uma coluna base_url (https://vdaluz.com), mas o trecho de caminho entre o domínio e o slug, /blog/ no caso do vdaluz.com, estava fixo no partial da página de exibição. Isso funcionava para um blog, mas quebraria assim que eu adicionasse outro blog com uma estrutura de URL diferente.

Então eu precisava tornar esse trecho de caminho configurável.

O que eu construí

Adicionei uma coluna post_path_prefix em blogs; uma string como /blog que fica entre base_url e o slug do post. Depois Post#live_url monta a URL completa:

def live_url
  return nil if blog.base_url.blank? || pub_date.blank?
  "#{blog.base_url.chomp('/')}#{blog.post_path_prefix}/#{slug}"
end

A trava do pub_date é intencional. Rascunhos e posts sem data de publicação ainda não têm URL ao vivo; mostrar um link quebrado é pior do que não mostrar link nenhum.

A migration preenche retroativamente as linhas existentes com /blog, então a configuração atual continua funcionando sem nenhum ajuste manual de dados:

reversible do |dir|
  dir.up { Blog.update_all(post_path_prefix: "/blog") }
end

No índice, os títulos dos posts publicados agora abrem em link com target="_blank" rel="noopener". Rascunhos caem de volta para a página de exibição interna. O selo de URL da página de exibição, que antes era fixo como "#{post.blog.base_url}/blog/#{post.slug}", agora usa post.live_url, então existe uma única fonte de verdade para o formato da URL.

A coisa que quase passou batido

O spec do issue pedia para adicionar uma coluna live_url em blogs. Mas base_url já existia e fazia o mesmo trabalho. Adicionar live_url teria sido um campo redundante sem dono claro. Descartei essa parte do spec e mantive a coluna existente; o acréscimo do post_path_prefix era tudo que realmente fazia falta.

Resultado

Clico no título de um post publicado, caio no post ao vivo. Isso poupa uns 2 segundos de esforço mental a menos do que antes. Nada glamouroso, mas é esse tipo de coisa que faz uma ferramenta parecer feita sob medida para você.

Leitura relacionada

Você também pode achar útil

Proton

Proton Drive

Armazenamento em nuvem criptografado, da equipe por trás do Proton Mail.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais
Proton

Proton Mail

E-mail criptografado de ponta a ponta, com arquitetura de acesso zero.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais
Proton

Proton VPN

VPN comercial com filtragem NetShield e interruptor de desligamento automático.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais