Dando continuidade ao estudo de roteamento com Rails introduzido no post anterior, vou mostrar como é possível adicionar ações a um roteamento REST, indo além das sete definidas por padrão, e também como fazer para remover alguma das operações padrão quando esta realmente não for necessária em sua aplicação.
Adicionando ações
No post anterior não cheguei a apresentar o código de um controlador RESTful criado pelo Rails, mas, omitindo o conteúdo das ações, sua estrutura fica basicamente assim:
class PessoasController < ApplicationController def show ... end def new ... end def index ... end def create ... end def edit ... end def update ... end def destroy ... end end
Quando o arquivo de configuração config/routes.rb inclui a linha resources :pessoas, estas sete ações são automaticamente mapeadas pelo Rails, cada uma para um path e um método HTTP específico. Veja o post anterior para maiores detalhes.
Porém pode haver situações em que se deseja ter mais ações além das sete predefinidas. A configuração de roteamento terá então dois formatos, sendo um para quando a nova ação aplicar-se a um elemento específico de nosso resource e o outro para quando aplicar-se à coleção geral.
Quando a nova ação aplicar-se a um elemento específico, o método empregado é o member:
resources :pessoas do member do post :duplicar end end
Observe na linha 2 o método member sendo invocado com a passagem de um bloco onde, na linha 3, o método post indica que através de uma requisição HTTP POST o método duplicar de nosso controlador deverá ser invocado.
A nova ação duplicar pode então ser acessada através do helper automaticamente disponibilizado para uso na camada view:
<%= button_to 'Duplicar', duplicar_pessoa_path(@pessoa) %>
Quando a nova ação aplicar-se à coleção geral, o método empregado é o collection:
resources :pessoas do collection do get :pesquisar end member do post :duplicar end end
Observe que dessa vez na linha 2 o método collection é invocado com a passagem de um bloco onde, na linha 3, o método get indica que através de uma requisição HTTP GET o método pesquisar de nosso controlador deverá ser invocado. Sendo uma requisição GET, o acesso pode ser feito pelo path /pessoas/pesquisar.
Outra forma mais compacta de definir os dois novos roteamentos seria assim:
resources :pessoas do get 'pesquisar', on: :collection post 'duplicar', on: :member end
Removendo ações
Conforme mencionado no início, pode haver situações em que não são necessárias as sete operações criadas por padrão pelo Rails. Poder removê-las é importante, não só por remover código desnecessário de sua aplicação, mas por ter menos pontos de acesso para se preocupar com segurança, etc. Por isso, é bem recomendado que as ações desnecessárias sejam removidas.
Como de costume, a forma de realizar isso em Rails é bastante simples:
resources :pessoas, except: [:edit, :update]
Auto-explicativo! E se a quantidade de ações a serem descartadas for maior que a quantidade das que devem ser disponibilizadas, é preferível utilizar only em vez de except:
resources :pessoas, only: [:show]
Então, neste post apresentei mais algumas possibilidades bem úteis e interessantes da configuração de roteamento em Rails. Para maiores detalhes continuo recomendando a referência oficial disponível em http://guides.rubyonrails.org/routing.html e o livro Rails Recipes, capítulos 23 e 25.
Até a próxima!
Nenhum comentário:
Postar um comentário