Como criar uma URL amigavel no Rails

Subcategoria: Ruby on Rails

URL amigavel no rails: passo a passo

Editando o to_param

Nesse exemplo vamos utilizar a entidade Post, como se fosse um post de um blog mesmo.

Antes de começar esse tutorial, verifique se sua classe em questão (nesse exemplo é a Post) possui algum atributo que resepresenta a url amigavel, pode ser um atributo chamado url mesmo, caso ele não exista basta adicionar. Esse atributo pode ser preenchico com um campo no formulário, ou fazendo algum tratamento com o título do post.

Exemplo: url: "um-exemplo-de-url-amigavel"

Você pode separar as palavras tanto por hífen "-" (mais comum) como por underlines "_"

Bom para começar vamos editar o método to_param no nosso arquivo Post modal:

def to_param
  url
end

Alterando as rotas

Agora vamos indicar na nossa rota que ele deve user o param url, lembrando que o atributo param: só existe do Rails 4 pra frente.

resources :posts, param: :url

Trocando chamada dos objetos posts

Agora lembre-se de corrigir todas chamadas dos posts em todas as controllers, antes buscavamos o post pelo id, agora vamos buscar pelo atributo :url

class PostsController < ApplicationController
  
def set_post
    @post = Post.find_by(url: params[:url])
  end
end

Dica Importante: Como a busca dos posts agora é feita pelo atributo :url e não pelo :id é muito importante que você garanta que a :url de cada post é única, ela não pode se repetir ou você terá problemas. Isso pode ser resolvido com uma validação simples de unicidade, que garante que o atributo deve ser único

class Post < ApplicationRecord
  def to_param
    url
  end
  # my validations
  validates :url, 
    uniqueness: { message: 'Já exite um Post com essa url' }
end

Pronto, agora basta acessar seus posts usando a url amigavel.
Exemplo: www.localhost:3000/posts/meu-primeiro-post

Comentários