<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dominique Morem</title>
    <description>The latest articles on DEV Community by Dominique Morem (@dominiquemorem).</description>
    <link>https://dev.to/dominiquemorem</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3388419%2Ff0254bc1-0f5c-44c1-9428-e0e0e4ef12a4.jpeg</url>
      <title>DEV Community: Dominique Morem</title>
      <link>https://dev.to/dominiquemorem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dominiquemorem"/>
    <language>en</language>
    <item>
      <title>Descobrindo a fonte utilizada em um site e aplicando ela ao seu projeto Tailwind 4.0/Rails</title>
      <dc:creator>Dominique Morem</dc:creator>
      <pubDate>Mon, 18 Aug 2025 20:33:14 +0000</pubDate>
      <link>https://dev.to/dominiquemorem/descobrindo-a-fonte-utilizada-em-um-site-e-aplicando-ela-ao-seu-projeto-tailwind-40rails-3m5d</link>
      <guid>https://dev.to/dominiquemorem/descobrindo-a-fonte-utilizada-em-um-site-e-aplicando-ela-ao-seu-projeto-tailwind-40rails-3m5d</guid>
      <description>&lt;p&gt;Supondo que um belo dia você esteja navegando em sites por aí e, do  nada, goste de uma fonte que está em um deles e deseje colocá-la também no seu site. &lt;/p&gt;

&lt;p&gt;Seria um processo não muito dificultoso, o backender - sem saco para lidar com front - pergunta a IA, ela responde e todo mundo sai feliz. Só que o Tailwind passou por uma atualização de versão e agora, da versão 4.0 para frente, acabou, exterminou, extinguiu o &lt;a href="https://tailwindcss.com/blog/tailwindcss-v4" rel="noopener noreferrer"&gt;tailwind.config.js&lt;/a&gt; (se quiser se aprofundar mais na questão digite 'CSS-first configuration' dentro desse link que eu passei). &lt;/p&gt;

&lt;p&gt;Isso tem dado um nó na cabeça de muita gente. Especialmente porque muitas IAs foram 'alimentadas' com versões mais antigas do Tailwind, ou seja, as respostas que elas derem conterão alguma configuração no finado tailwind.config.js. &lt;/p&gt;

&lt;p&gt;Mas não vamos arrancar os nossos cabelos, ok? As configurações que antes eram feitas no &lt;code&gt;tailwind.config&lt;/code&gt; agora devem ser feitas diretamente no &lt;code&gt;arquivo CSS&lt;/code&gt;. Em projetos Rails o arquivo fica bem aqui:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;app &amp;gt; assets &amp;gt; tailwind &amp;gt; application.css&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dito isso, vamos começar do zero com o passo-a-passo da operação que eu me propus a realizar no título.&lt;/p&gt;

&lt;h2&gt;
  
  
  Descobrindo a fonte
&lt;/h2&gt;

&lt;p&gt;Inventei de navegar por esse site &lt;a href="https://www.comuseum.com/" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; e achei a fonte linda. Como vou encontrá-la?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Aperte a tecla *&lt;em&gt;F12&lt;/em&gt; no seu teclado, ou clique com o botão direito do mouse em qualquer lugar do site e selecione a opção 'inspecionar'.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No DevTools vá no botão para inspecionar: &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbvb9lrysoypocp13ald.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbvb9lrysoypocp13ald.png" alt="'Image description'" width="739" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ao inspecionar a fonte no site há duas formas de descobrir: &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;3.1 Ou passando o cursor por cima da fonte a aguardando a janela de inspeção da tag HTML abrir e informar qual é a fonte.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4w73i15wfe2em0lk3ry0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4w73i15wfe2em0lk3ry0.png" alt="'Image description'" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.2 Ou clicando em cima do elemento e, no DevTools, indo a seção 'Styles' e procurando a &lt;code&gt;font-family&lt;/code&gt; por lá. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffy53my3wdnyysjagha3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffy53my3wdnyysjagha3q.png" alt="'Image description'" width="800" height="803"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Adquirindo os arquivos no Google Fonts
&lt;/h2&gt;

&lt;p&gt;Agora que já sabemos qual é o nome da fonte empregada no site, vamos ao &lt;a href="https://fonts.google.com/" rel="noopener noreferrer"&gt;Google Fonts&lt;/a&gt; descolá-la para o nosso. No Google Fonts procure pelo nome da sua fonte.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bmhdakwxo1c8lc43td2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bmhdakwxo1c8lc43td2.png" alt="'Image description'" width="800" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecione o tamanho máximo que deseja e se deseja versão em itálico para a fonte ou não. Decidido isso clicamos em &lt;strong&gt;Get Font&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkte1t871u7vklrd8jeg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkte1t871u7vklrd8jeg.png" alt="'Image description'" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois vamos em &lt;strong&gt;Get embed code&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7jwwz1xio7k6cqdxtx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7jwwz1xio7k6cqdxtx9.png" alt="'Image description'" width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecione a opção &lt;strong&gt;link&lt;/strong&gt; e depois clique em &lt;strong&gt;Copy code&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fifh2vnx5rg38fs0flvcu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fifh2vnx5rg38fs0flvcu.png" alt="'Image description'" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Aplicando a fonte ao seu projeto Rails
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1 - Modificações no application.html.erb
&lt;/h3&gt;

&lt;p&gt;Para aplicara a fonte no projeto Rails vamos até o arquivo &lt;code&gt;application.html.erb&lt;/code&gt; que fica bem aqui:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;app &amp;gt; views &amp;gt; layouts &amp;gt; application.html.erb&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;E nele, logo abaixo das metatags que ficam dentro da tag &lt;/p&gt; vamos inserir as tags da fonte que copiamos:&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"preconnect"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://fonts.googleapis.com"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"preconnect"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://fonts.gstatic.com"&lt;/span&gt; &lt;span class="na"&gt;crossorigin&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://fonts.googleapis.com/css2?family=Crete+Round:ital@0;1&amp;amp;display=swap"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Para além disso, vamos até o &lt;strong&gt;&lt;/strong&gt; do nosso arquivo - aqui mesmo no &lt;code&gt;application.html.erb&lt;/code&gt; - e vamos atribuir a ele a seguinte classe:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;class="font-sans"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vai ficar assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjltif57k9zvnrs9wy95c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjltif57k9zvnrs9wy95c.png" alt="'Image description'" width="800" height="708"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2 - Modificação no application.css
&lt;/h3&gt;

&lt;p&gt;Agora vamos ao anteriormente falado &lt;strong&gt;application.css&lt;/strong&gt; percorrendo o caminho:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;app &amp;gt; assets &amp;gt; tailwind &amp;gt; application.css&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Neste arquivo você vai configurar o tema e dentro do tema a fonte geral do teu site:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt; &lt;span class="k"&gt;@theme&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--font-sans&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Jost"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Troque o "Jost" e o "sans-serif" pelo que estiver bem aqui nos arquivos da sua fonte lá no Google Fonts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmrq9o96fo4ve3owfbwd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmrq9o96fo4ve3owfbwd.png" alt="'Image description'" width="423" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora que já fizemos as modificações, vamos restartar o servidor e recarragar os estilos colocando um &lt;strong&gt;bin/dev&lt;/strong&gt; no terminal...&lt;/p&gt;

&lt;h2&gt;
  
  
  Antes e Depois
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Antes:
&lt;/h3&gt;

&lt;p&gt;Originalmente, eu estava utilizando essa fonte aqui no meu projeto Rails:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4ds11mpnt50vv7peh56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4ds11mpnt50vv7peh56.png" alt="'Image description'" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Depois:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5con3mcbcvzrnzgjm9ar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5con3mcbcvzrnzgjm9ar.png" alt="'Image description'" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Comparativo com o site originalda fonte
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1e02n048i08mi47mghnj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1e02n048i08mi47mghnj.png" alt="'Image description'" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rails</category>
      <category>tailwindcss</category>
      <category>googlefonts</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Login e Logout no Rails 8 para apressadinhos</title>
      <dc:creator>Dominique Morem</dc:creator>
      <pubDate>Tue, 12 Aug 2025 20:31:52 +0000</pubDate>
      <link>https://dev.to/dominiquemorem/login-e-logout-no-rails-8-para-apressadinhos-46do</link>
      <guid>https://dev.to/dominiquemorem/login-e-logout-no-rails-8-para-apressadinhos-46do</guid>
      <description>&lt;h2&gt;
  
  
  Criando o login
&lt;/h2&gt;

&lt;p&gt;Dê um:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rails&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="n"&gt;authentication&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você vai ver algo assim no seu terminal:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3f34lp7b8f280rlj3nv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3f34lp7b8f280rlj3nv.png" alt="'Image description'" width="777" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois disso, confira se a &lt;a href="https://rubygems.org/gems/bcrypt/versions/3.1.12" rel="noopener noreferrer"&gt;gem bcrypt&lt;/a&gt; está descomentada. Caso não esteja, descomente e salve a alteração. Precisaremos dela para a encriptação de senhas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migrando atualizando o BD com as novas tabelas geradas
&lt;/h2&gt;

&lt;p&gt;Veja que ao dar o comando do generate de autenticação (para criar o login)  o Rails realizou - entre outras ações - a criação de três models: current, user e session.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F10yra8su8fjwcyics9wn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F10yra8su8fjwcyics9wn.png" alt="'Image description'" width="353" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Logo, precisamos atualizar o nosso banco de dados para passar a ter essas respectivas tabelas.&lt;/p&gt;

&lt;p&gt;Para isso vamos dar um...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rails&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="ss"&gt;:migrate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;... para efetivar essas mudanças no banco de dados.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgmy7amizr1xpjfh474xb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgmy7amizr1xpjfh474xb.png" alt="'Image description'" width="753" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Logando na Aplicação
&lt;/h2&gt;

&lt;p&gt;Há duas formas de você logar na aplicação:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Pode ser utilizando os emails que constam pré-configurados na pasta &lt;strong&gt;fixtures&lt;/strong&gt;  (como mostra &lt;a href="https://www.youtube.com/watch?v=4q1RWZABhKE" rel="noopener noreferrer"&gt;Typecraft&lt;/a&gt; em seu vídeo).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pode ser você criando no banco de dados o seu próprio registro de usuário. Você pode criar o usuário que você quiser por lá.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1 - Logando com e-mails pré-configurados
&lt;/h3&gt;

&lt;p&gt;Para acessá-los vamos em:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;test &amp;gt; fixtures &amp;gt; files &amp;gt; users.yml&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe06tlelanqlsagfsvrr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe06tlelanqlsagfsvrr8.png" alt="'Image description'" width="796" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos ajeitar as senhas (as senhas vêm por padrão como 'password') mas para poder utilizá-las é preciso dar um comando antes...&lt;/p&gt;

&lt;p&gt;Vamos dar um:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rails&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="ss"&gt;:fixtures:load&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rápida explicação sobre rails db:fixtures:load - Início&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esse comando serve para carregar os dados definidos nos arquivos de &lt;br&gt;
fixtures(geralmente &lt;strong&gt;.yml&lt;/strong&gt;  - como o &lt;strong&gt;users.yml&lt;/strong&gt; por exemplo - &lt;br&gt;
dentro  de &lt;strong&gt;test/fixtures/&lt;/strong&gt;) para o banco de dados.&lt;/p&gt;

&lt;p&gt;Ou seja, o Rails vai ler os arquivos YAML de fixtures, por exemplo &lt;br&gt;
&lt;strong&gt;test/fixtures/users.yml&lt;/strong&gt; e vai inserir os dados definidos nesses &lt;br&gt;
arquivos nas respectivas tabelas do banco.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rápida explicação sobre rails db:fixtures:load - Final&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Selecione um dos emails presentes no arquivo &lt;strong&gt;users.yml&lt;/strong&gt;&lt;br&gt;
(&lt;strong&gt;test &amp;gt; fixtures &amp;gt; files&lt;/strong&gt;) para colocar no campo de email do login.&lt;/p&gt;

&lt;p&gt;E, como senha, utilize a palavra: &lt;strong&gt;password&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn0y44uwz1ond4u0a84ox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn0y44uwz1ond4u0a84ox.png" alt="'Image description'" width="366" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bingo! Ele vai entrar!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffxepiabx2gd2r02e8l5n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffxepiabx2gd2r02e8l5n.png" alt="'Image description'" width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2 - Logando na aplicação com o seu e-mail
&lt;/h3&gt;

&lt;p&gt;Para logar com o seu email ou com qualquer outro exemplo de email que te der na telha, faça o seguinte:&lt;/p&gt;

&lt;p&gt;No terminal, dê um:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rails&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para acessar o console do Rails.&lt;/p&gt;

&lt;p&gt;Uma vez neste, digite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;para visualizar os nomes dos campos...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28xsm54v2snc61pt5zok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28xsm54v2snc61pt5zok.png" alt="'Image description'" width="799" height="59"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perfeito! Desses campos o único que você vai copiar na íntegra é o &lt;strong&gt;email_address:&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Isso porque o &lt;strong&gt;id&lt;/strong&gt;, o &lt;strong&gt;created_at:&lt;/strong&gt; e o &lt;strong&gt;updated_at:&lt;/strong&gt; são preenchidos automaticamente pelo Rails quando você cria o registro. &lt;/p&gt;

&lt;h4&gt;
  
  
  A questão do password_digest
&lt;/h4&gt;

&lt;p&gt;NÃO PASSE O COMANDO DE CRIAÇÃO DO REGISTRO COM &lt;strong&gt;password_digest&lt;/strong&gt; DIRETAMENTE (!!!) - Vá por mim, eu fiquei quebrando cabeça um tempão porque cometi esse erro e não sabia porque não estava dando certo!&lt;/p&gt;

&lt;p&gt;Ao tentar criar um registo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;email: &lt;/span&gt;&lt;span class="s2"&gt;"teste@email.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;password_digest: &lt;/span&gt;&lt;span class="s2"&gt;"123456"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso não criptografará nada. Você estará gravando "123456" puro na coluna, o que significa dizer que a senha real estará exposta no banco (o que se trata de um gravíssimo risco de segurança).  E, o método authenticate não vai funcionar, porque ele espera um hash BCrypt, não o texto plano.  Basicamente, você quebrará o fluxo do Rails Auth.&lt;/p&gt;

&lt;p&gt;Dê preferência por preencher o campo de senha apenas com &lt;strong&gt;password&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Quando você passa password: "123456" o has_secure_password  intercepta o setter password= e usa a gem BCrypt para criar um hash seguro dessa senha. Com isso ele vai gravar esse hash no campo password_digest antes de salvar.&lt;/p&gt;

&lt;p&gt;Ps: não precisa utilizar password_confirmation se não quiser validação de confirmação.&lt;/p&gt;

&lt;p&gt;Por fim, depois dessa digressão toda, a criação do usuário no BD vai ficar estruturada assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;email_address: &lt;/span&gt;&lt;span class="s2"&gt;"tim.maia@hotmail.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;password: &lt;/span&gt;&lt;span class="s2"&gt;"descobridor_dos_sete_mares"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Obs: A exclamação (!) no final do create é para ele gerar uma mensagem de erro caso a inserção do registro no BD dê too much wrong.&lt;/p&gt;

&lt;p&gt;Plim! Registro bem sucedido! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs7vtdig4xhtx2cfr38bu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs7vtdig4xhtx2cfr38bu.png" alt="'Image description'" width="797" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos testar para ver se funcionou mesmo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn6ob4d3o5o63hpoi70mf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn6ob4d3o5o63hpoi70mf.png" alt="'Image description'" width="624" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Foi, deu certo!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwzwj4mf7gicvycjoy21.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwzwj4mf7gicvycjoy21.png" alt="'Image description'" width="799" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Saindo da aplicação - Fazendo Logout
&lt;/h2&gt;

&lt;p&gt;Para deslogar da aplicação você pode inserir no seu menu principal da aplicação - ou em algum lugar da homepage - o seguinte botão (que &lt;a href="https://avohq.io/blog/rails-8-authentication" rel="noopener noreferrer"&gt;Exequiel Rozas&lt;/a&gt; criou), que já vem pré-configurado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% if &lt;/span&gt;&lt;span class="no"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;present?&lt;/span&gt; &lt;span class="sx"&gt;%&amp;gt;
  &amp;lt;%= button_to "Sign out", session_path, method: :delete, class: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-black underline focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500" %&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% else &lt;/span&gt;&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= link_to "Sign in", new_session_path, class: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500" %&amp;gt;
&amp;lt;% end %&amp;gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vai ficar mais ou menos assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8631hne4imoi8iyslzx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8631hne4imoi8iyslzx.png" alt="'Image description'" width="796" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1roznkwozr1ofgvncgo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1roznkwozr1ofgvncgo.png" alt="'Image description'" width="709" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Digo 'mais ou menos' assim porque eu mudei o tailwind original dos botões para ficarem vermelho e verde:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% if &lt;/span&gt;&lt;span class="no"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;present?&lt;/span&gt; &lt;span class="sx"&gt;%&amp;gt;
    &amp;lt;%= button_to "Sign out", session_path, method: :delete, class: "focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900" %&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% else &lt;/span&gt;&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= link_to "Sign in", new_session_path, class: "focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800" %&amp;gt;
&amp;lt;% end %&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Falta agora configurar para que você só veja as suas postagens e ous outros só vejam as postagens ou publicações deles. Mas isso é tema para um outro post...&lt;/p&gt;

&lt;h2&gt;
  
  
  Agradecimentos:
&lt;/h2&gt;

&lt;p&gt;Se pude criar este minitutorial devo isso a 3 pessoas me passaram um pouco do seu conhecimento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Professor Anchieta (meu professor de Programação Avançada)&lt;/li&gt;
&lt;li&gt;Typecraft do Canal Ruby on Rails&lt;/li&gt;
&lt;li&gt;E Exequiel Rozas&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rails</category>
      <category>authentication</category>
      <category>login</category>
      <category>logout</category>
    </item>
    <item>
      <title>Identificador Único Universal (UUID): o que a pgcrypto e a sua mãe têm em comum...</title>
      <dc:creator>Dominique Morem</dc:creator>
      <pubDate>Sat, 26 Jul 2025 02:40:53 +0000</pubDate>
      <link>https://dev.to/dominiquemorem/identificador-unico-universal-uuid-o-que-a-pgcrypto-e-a-sua-mae-tem-em-comum-3j37</link>
      <guid>https://dev.to/dominiquemorem/identificador-unico-universal-uuid-o-que-a-pgcrypto-e-a-sua-mae-tem-em-comum-3j37</guid>
      <description>&lt;p&gt;Sim eu sei, a comparação entre a sua mãe e uma extensão do PostgreSQL pode soar um tanto quanto estranha e bizarra, mas sim... ela é possivel! &lt;/p&gt;

&lt;p&gt;Vou traçar um paralelo entre o que a pgcrypto*1 proporciona e o que a sua mãe proporciona e você vai entender a comparação! Para tal, vou me munir de todo o arsenal argumentativo que o Davide Santangelo traz sobre as vantagens e desvantagens do uso de UUIDs em sua fabulosa &lt;a href="https://dev.to/daviducolo/unleash-the-power-of-uuids-turbocharge-your-postgres-and-rails-experience-for-bulletproof-data-management-m0e"&gt;postagem&lt;/a&gt;... &lt;/p&gt;

&lt;p&gt;Mas espera aí, o que que é pgcrypto e porque você está falando de UUIDs? Está tudo meio solto, não estou entendendo...&lt;/p&gt;

&lt;p&gt;Vamos contextualizar: a pgcrypto é uma extensão do PostgreSQL que te permite criptografar, descriptografar, gerar hashes e criar assinaturas digitais dentro do seu banco de dados (fonte: &lt;a href="https://www.tigerdata.com/learn/postgresql-extensions-pgcrypto" rel="noopener noreferrer"&gt;TigerData&lt;/a&gt;). Mais do que isso, é ela quem te permite trabalhar com UUIDs na sua aplicação Rails (vide a &lt;a href="https://guides.rubyonrails.org/v5.0/active_record_postgresql.html#uuid-primary-keys" rel="noopener noreferrer"&gt;documentação&lt;/a&gt; - Dá para usar a extensão uuid-ossp também, mas atualmente não é lá muito recomendável*3). Essa extensão, como a sua, a minha, as nossas mães pode nos trazer algo, uma ferramenta poderosa para nos dar paz de espírito em alguns momentos. Está curioso para saber? Vem comigo que eu te mostro, mas antes de partirmos lembre-se "A pgcrypto te possibilita gerar UUIDs", guarde isso! Vamos às semelhanças: &lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1 - Nada de vida fácil aos predadores!
&lt;/h3&gt;

&lt;p&gt;Assim como muitas mamães escondem os seus filhotinhos de predadores no reino animal, a pgcrypto também esconde o que lhe é caro (os IDs)! Ela vai encriptografar os IDs das suas tabelas, conferindo aleatoriedade e imprevisibilidade a eles. Como uma mãe protetora, ela mascara os IDs da sua aplicação, tornando os identificadores mais dificeis de ler e manusear*1 &lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2 - Te impede de entrar em conflitos!
&lt;/h3&gt;

&lt;p&gt;Quem nunca ouviu um "Se brigar na escola, vai apanhar 2 vezes. Uma na rua e a outra quando chegar em casa..."? A saudosa Rochelle, mãe do Chris - de 'Todo mundo odeia o Chris' - é um clássico exemplo disso! Bordões à parte, Santangelo explica que os UUIDs são gerados para serem globalmente únicos, ou seja, eles promovem uma maior garantia de que registros de diferentes bancos de dados - ou sistemas distribuídos - nunca entrem em conflito. &lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3 - Se tem, o que tem, quanto tem e onde tem... não interessa! Ou pelo menos não a quem vem de fora.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.mulher.com.br/familia/gravidez-e-bebes/13-famosos-que-escondem-seus-filhos-do-publico-e-da-imprensa-ha-apenas-fotos-raras" rel="noopener noreferrer"&gt;Vanessa da Mata&lt;/a&gt;, &lt;a href="https://www.mulher.com.br/familia/gravidez-e-bebes/13-famosos-que-escondem-seus-filhos-do-publico-e-da-imprensa-ha-apenas-fotos-raras" rel="noopener noreferrer"&gt;Leandra Leal&lt;/a&gt;, &lt;a href="https://www.estrelando.com.br/foto/2025/05/08/confira-as-mamaes-que-escondem-suas-crias-194772/foto-1" rel="noopener noreferrer"&gt;Adele&lt;/a&gt; e &lt;a href="https://veja.abril.com.br/coluna/veja-gente/a-fama-apos-a-gravidez-famosos-que-escondem-seus-bebes?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Sandy&lt;/a&gt; são alguns exemplos de mães que optaram por preservar a privacidade, o sigilo e o anonimato de seus filhos, muitas vezes por uma questão óbvia de segurança. Não é incomum que celebridades que sejam mães e pais mantenham seus filhos fora dos holofotes, o recente caso do &lt;a href="https://gauchazh.clicrbs.com.br/viral/noticia/2025/07/extrapolou-o-bom-senso-entenda-a-polemica-envolvendo-a-filha-de-roberto-justus-cmcupml3a004u014rf91a5301.html" rel="noopener noreferrer"&gt;ataque&lt;/a&gt; à filha de Roberto Justus nas redes ilustra bem isso. &lt;br&gt;&lt;/p&gt;

&lt;p&gt;Manter a privacidade de quanto tem, o que tem e onde tem pode te poupar de uma série de problemas e essas pessoas famosas - mães ou não - sabem disso. Pois bem, o mesmo princípio das mães discretas também se aplica ao uso do UUID em projetos. Isso fica claro da fala de &lt;a href="https://www.tabnews.com.br/GabriPires/quando-utilizar-uuid-e-quanto-utilizar-auto-increment" rel="noopener noreferrer"&gt;Eliaseas&lt;/a&gt;, em um debate num tópico do TabNews, quando o desenvolvedor revela que o UUID cria:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[...] segurança por obscuridade. Você pode não querer dar visibilidade ao usuário sobre a quantidade de pedidos que tem no seu sistema. Então ao invés de usar um id de pedido sequencial, você randomiza usando um UUID. &lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;
  
  
  Mas nem tudo são flores! &lt;br&gt;&lt;br&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1 - Coração de mãe é grande, sempre cabe mais um!
&lt;/h3&gt;

&lt;p&gt;Pois é, enquanto que na vida real a frase tem uma conotação positiva e acolhedora, aqui na analogia que eu tracei ela não é tão 'simpática' assim. Isso porque, em comparação aos inteiros autoincrementais o UUID possui um tamanho de armazenamento aumentado, o que consome mais do banco de dados. UUIDs possuem 128 &lt;a href="https://www.postgresql.org/docs/current/datatype-uuid.html" rel="noopener noreferrer"&gt;bits&lt;/a&gt;, enquanto que os Inteiros possuem apenas 32 &lt;a href="https://medium.com/@PlanB./uuid-vs-int-for-production-systems-security-considerations-and-performance-trade-offs-e0cb7c82f129" rel="noopener noreferrer"&gt;bits&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  2 - "Onde estás, meu senhor. Onde estás? Onde estás?" (Diáspora - Tribalistas)
&lt;/h3&gt;

&lt;p&gt;O trecho acima é de uma &lt;a href="https://www.youtube.com/watch?v=neR2vTRrs4M" rel="noopener noreferrer"&gt;música&lt;/a&gt; dos Tribalistas que ilustra bem os desafios de quem emigra de um lugar para o outro. Quase sempre o processo de migração - quer seja para as casas de nossos pais ou não - é trabalhoso, muito trabalhoso e, às vezes, demorado, burocrático e pode deixar a gente meio perdido (como no trecho da canção). &lt;/p&gt;

&lt;p&gt;É necessário passar por uma série de adequações, mudanças e processos nessa migração de uma casa para a outra. De um lugar para o outro. Tanto quanto demostrado na música acima, migrar as chaves primarias e estrangeiras de um banco de dados de inteiros para UUID pode ser um processo um tanto quanto burocrático, trabalhoso e delicado. A migração de dados, caso você esteja em uma aplicação já existente e queira realizar o processo de mudança, apesar de trabalhosa é &lt;a href="https://ruby.mobidev.biz/posts/moving-from-id-to-uuid-in-existing-app/" rel="noopener noreferrer"&gt;possivel&lt;/a&gt;.  &lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  "Está bagunçado, mas tem gerência!" &lt;br&gt;&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;Para finalizar a postagem, trago esse bordão da mãe de uma amiga minha. Ela sabia brincar quando era para brincar, mas sabia passar muita informação séria e educativa também. Como ela, eu quis trazer aqui algo que tivesse essa pegada, leve e informativa (e se eu não consegui trazer, ao seu ver, peço perdão!). Apesar da postagem possuir um fundo humorístico, o intuito era mesclar algumas infomações técnicas também. &lt;/p&gt;

&lt;p&gt;Caso tenha se interessado pela temática dos Identificadores Únicos Universais trabalhados com o PostgresSQl e com o Ruby on Rails. Deixo aqui duas referências, que eu pude acompanhar e que são ótimas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Se você quiser saber como utilizar UUID no Rails 7 com PostgreSQL: &lt;a href="https://dev.to/xandekk/usando-uuid-no-rails-7-com-postgresql-223o"&gt;https://dev.to/xandekk/usando-uuid-no-rails-7-com-postgresql-223o&lt;/a&gt;. O texto é bem objetivo, claro e didático. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Caso queira ver na prática ali na tela, no ao vivo, como se faz esse processo de implantação e o porque fazê-lo. Sugiro o curso 'Ruby on Rails 7.x para Iniciantes' do Professor Jackson Pires: &lt;a href="https://videosdeti.com.br/" rel="noopener noreferrer"&gt;https://videosdeti.com.br/&lt;/a&gt;. Em uma de suas aulas ele ensina a como configurar a aplicação para aplicar o UUID aos ID das tabelas.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sobre os asteríscos no texto (são aprofundamentos)...
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;1 - Aprofundando - Universally unique identifier ou Identificador Único Universal traduzindo para o português. É um identificador universalmente exclusivo, que consiste em um número de 128 bits representado por 32 dígitos hexadecimais, que são exibidos em cinco grupos e que são separados por hifens segundo &lt;a href="https://medium.com/trainingcenter/o-que-%C3%A9-uuid-porque-us%C3%A1-lo-ad7a66644a2b" rel="noopener noreferrer"&gt;Paixão&lt;/a&gt; (2018)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2 - Aprofundando - Davide fala que uso de UUIDs pode melhorar a segurança da sua aplicação, pos dificulta que agentes maliciosos prevejam ou adivinhem valores das chaves primárias. E para além disso, os UUIDs não expõem informações sobre a sequência ou estrutura de outros identificadores.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;3 - Aprofundando: - Observação, você pode utilizar a extensão uuid-ossp do PostgreSQL, também presente na documentação do Rails, mas ela só é &lt;a href="https://github.com/websauna/websauna/issues/209" rel="noopener noreferrer"&gt;indicada&lt;/a&gt; caso você esteja trabalhando com uma versão abaixo da 9.4 do Postgres, depois dessa versão ela foi &lt;a href="https://stackoverflow.com/questions/49467296/keeping-both-uuid-ossp-and-pgcrypto-in-a-rails-project" rel="noopener noreferrer"&gt;substituída&lt;/a&gt; pela pgcrypto. A própria &lt;a href="https://guides.rubyonrails.org/v5.0/active_record_postgresql.html#uuid-primary-keys" rel="noopener noreferrer"&gt;documentação&lt;/a&gt; do Rails também faz essa recomendação. Caso deseje um comparativo mais objetivo sobre as duas extensões e porquê utilizar cada uma ou não, segue uma tabelinha que eu pedi pro Chat GPT gerar... ps: lembre-se de que IAs podem alucinar, portanto, nem tudo que está ali pode ser fato.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb37sysyqe5lho299mmew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb37sysyqe5lho299mmew.png" alt="Imagedescription" width="800" height="701"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>uuid</category>
      <category>rails</category>
      <category>humor</category>
      <category>postgres</category>
    </item>
  </channel>
</rss>
