Carlos Brando

Nome do Jogo

Rails 2.2: Limitando as actions de um recurso

A criação de rotas nomeadas é algo muito simples, mas muito poderoso dentro do Rails. Por isto é justo que ele receba uma atenção especial em cada novo release.

No Rails 2.2 o sistema de rotas polimórficas foi aprimorado e o acesso aos resources foi simplificado. E para fechar com chave de ouro, uma nova opção na criação de rotas promete diminuir um pouco os gastos com memória causados pela geração desnecessária de código.

Duas novas opções foram adicionadas ao map.resources: :only e :except.

map.resources :posts

No código acima estou criando sete actions (index, create, new, edit, show, update e destroy) para o recurso Post. Mas digamos que eu só precise de duas (index e show), neste caso estou criando cinco actions desnecessariamente.

Usando estas novas opções eu poderia fazer isto:

map.resources :posts, :only => [:index, :show]

Assim, somente as actions necessárias serão criadas. Veja um outro exemplo de uso:

map.resources :posts, :only => [:index, :show] do |post|
  post.resources :comments, :except => [:update, :destroy]
end

No código acima acrescentei o recurso Comment, mas removendo as actions update e destroy que não serão usadas, já que não será possível atualizar nem apagar os comentários de um post.

Veja um resumo de algumas ações e o retorno de cada uma:

GET /posts (action PostsController#index)
POST /posts (falha)
GET /posts/1 (action PostsController#show)
DELETE /posts/1 (falha)
POST /posts/1/comments (action CommentsController#create)
PUT /posts/1/comments/1 (falha)

Um recurso interessante, mas que deve ser usado com critério.


Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails - O que há de novo?“.

Comments