Custom Resource Name Plugin

Você criou toda sua aplicação seguindo os padrões de convenção do Rails e agora quer lançar o seu site para que todo o Brasil possa usá-lo. Mas o problema é que todas as URLs do seu projeto estão em inglês, mais ou menos assim:

http://www.meusite.com.br/products/89/reviews

http://www.meusite.com.br/photos/1

http://www.meusite.com.br/photos/new

Mas seu público não fala inglês e sim português. Na verdade você precisa mesmo é de algo assim:

http://www.meusite.com.br/produtos/89/comentarios

http://www.meusite.com.br/fotos/1

http://www.meusite.com.br/fotos/novo

Como conseguir isto? A forma mais comum é criar todo seu código usando nomes em português para seus models, controllers e tabelas no banco de dados. Mas isto é simplesment HORRÍVEL… No final você terá um código totalmente desnormalizado, metade em português e metade em inglês e ainda vai acabar perdendo muito da mágica no Rails. Esqueça!

Uma segunda maneira de conseguir isto, é usar este plugin. Você conseguirá o mesmo efeito sem precisar alterar nenhuma linha do seu código, apenas configurando de uma maneira muito simples o arquivo routes.rb.


Instalando

Através do terminal, via linhas de comando acesse a pasta onde está sua aplicação Rails. E rode o seguinte comando:

./script/plugin install http://plugins.nomedojogo.com/custom_resource_name



Como Usar?

Abra o arquivo routes.rb no seu editor de texto preferido.

ActionController::Routing::Routes.draw do |map|

  map.resources :photos
  map.resources :posts, :has_many => :comments

end

Para ter suas URLs totalmente em português sem precisar alterar o seu código já existente, ou deixar tudo meio português/meio inglês. Simplesmente inclua estas linhas no seu arquivo routes.rb:

map.aliases :resources, :posts => ‘artigos‘,
  :comments => ‘comentarios‘

map.aliases :actions, :new => ‘novo‘, :edit => ‘editar‘,
  :logout => ‘sair‘

A primeira linha altera o nome das rotas, e a segunda altera o nome das actions. Para ficar bem claro, seu arquivo ficará mais ou menos assim:

ActionController::Routing::Routes.draw do |map|

  map.aliases :resources, :photos => 'fotos',
    :posts => 'artigos', :comments => 'comentarios'

  map.aliases :actions, :new => 'novo', :edit => 'editar',
    :logout => 'sair'

  map.resources :photos
  map.resources :posts, :has_many => :comments

end

Pronto! Você não precisa se preocupar com mais nada, todas as suas URLs à partir de agora irão usar o novo nome.

O detalhe é que tudo que estiver DEPOIS destas linhas usará esta configuração como padrão. Então se tiver algo onde você não queira usar a tradução, coloque ANTES destas duas linhas.

Os helpers para acessar a rota devem continuar exatamente como antes:

photos_path #=> /fotos

photos_url #=> http://www.meusite.com/fotos

photo_path(@photo) #=> /fotos/6

new_photo_path #=> /fotos/novo

edit_photo_url(@photo)
#=> http://meusite.com.br/fotos/6/editar

Enfim, nada muda, somente a URL.


Testando

Para se certificar de que o plugin irá funcionar perfeitamente em seu aplicativo, de dentro da pasta do projeto execute via linha de comando:

rake test:plugins

Se todos os testes passarem, use o plugin tranquilamente.


Licença

Este código é livre para ser usado sob os termos da MIT license.


Contato

Comentários são bem-vindos. Envie um e-mail para mim via formulário de contato.

E por fim, se este plugin é útil para você, não esqueça de me recomendar no Working with Rails.