Rails Namespace e o '/admin'
Olá pessoal.
Em desenvolvimento web sempre depara-se com a criação de um área de administração. O famoso '/admin'. Ou seja, querendo ou não, algum cliente vai acabar te pedindo pra criar uma área onde ele possa editar o conteúdo. Pensando no modo PHP de fazer vem logo à cabeça a criação de uma pasta 'admin'. Aí você vai lá e utiliza um pouco de sessão aqui, um pouco de cookie ali e pronto (eu fazia isso), basta digitar admin depois da URL e aí você cai na área administrativa do site. Mas em Rails, como faz? Como que eu crio uma pasta 'admin'? Tem como criar um controller dentro de outro controller(what??)?
Da primeira vez que me ocorreu tal problema eu o solucionei ao meu modo:
- Criei um Controller login responsável pela autenticação do usuário
- Coloquei todos os Controllers/Models que iriam ser alterados com acesso somente aos usuário autenticados
- E por fim criei um Controller pagina que tinha em cada action um determinado model que iria ser mostrado nas páginas pública
Ou seja, se eu tivesse por exemplo um Controller produtos, as operações create, edit, destroy e os endereços RESTful somente poderiam ser acessados após passar pelo login. Enquanto isso, na página inicial eu mostraria os produtos através da rota /pagina/produtos, que tinha em sua action um Produto.all.
Insatisfeito com tal método, não por pensar que estaria errado, já que ele deu certo, mas por pensar que existiria um 'Ruby way' de fazer. Foi aí que me deparei com Namespace. As coisas ficaram bem mais organizadas ao utilizar esse esquema de rotas.
Continuando no exemplo do Controller produtos anterior, eu fiz o seguinte:
- Criei um controller admin/produtos (isso mesmo, 'um controller dentro de outro' :D)
rails g controller Admin::Produtos
- Dentro do controller cria-se as actions a serem utilizadas na área administrativa. No meu caso new, edit, show...
- Agora utiliza-se o Namespace no arquivo de rotas
namespace :admin do resources :produtos end
Lembrando que o resources pode ser alterado para get, post, match, assim como é feito em outras rotas.
Fazendo desta maneira a aplicação em si ficou bem mais legível e fácil de modificar. Além de que agora de fato tem-se uma área administrativa, a qual eu posso acrescentar actions aos meus controllers como eu bem entender, de um modo muito mais organizado.
Bem mais a cara do Rails agora. :D
Então é isso! Abraço a todos

