Rails 3: Uma nova DSL para a configuração de rotas

14 de dezembro de 2009  |  Rails 3  | 

Muitas novidades estão sendo preparadas para a próxima versão do Rails. Uma que já estamos observando a alguns dias é a nova DSL para a configuração de rotas.

O Rails 3 ainda está em desenvolvimento, isto significa que o código da DSL pode sofrer alterações até o lançamento oficial. De qualquer forma você pode ir matando a curiosidade analisando o novo arquivo config/routes.rb que está sendo gerado pelo Rails 3.0.pre neste momento. Eu tomei a liberdade de traduzir os comentários para facilitar o entendimento.

ActionController::Routing::Routes.draw do |map|
  # A prioridade é baseada na ordem da criação:
  # criado primeiro -> maior prioridade.

  # Exemplo de uma rota comum:
  match 'products/:id', :to => 'catalog#view'
  # Tenha em mente que você pode atribuir outros valores além de
  # :controller e :action

  # Exemplo de uma rota nomeada:
  match 'products/:id/purchase',
    :to => 'catalog#purchase', :as => :purchase
  # Esta rota pode ser invocada utilizando
  # purchase_url(:id => product.id)

  # Exemplo utilizando resources (mapeia verbos HTTP para ações do
  # controller automaticamente)
  resources :products

  # Exemplo utilizando resources com opções:
  resources :products do
    member do
      get :short
      post :toggle
    end

    collection do
      get :sold
    end
  end

  # Exemplo utilizando resource com sub-resources:
  resources :products do
    resources :comments, :sales
    resource :seller
  end

  # Exemplo mais complexo de uso de resources com sub-resources:
  resources :products do
    resources :comments
    resources :sales do
      get :recent, :on => :collection
    end
  end

  # Exeplo utilizando resource com um namespace:
  namespace :admin do
    # Direciona /admin/products/* para Admin::ProductsController
    # (app/controllers/admin/products_controller.rb)
    resources :products
  end

  # Você pode definir a home do seu site utilizando "root"
  # Lembre-se de apagar o arquivo public/index.html.
  root :to => "welcome"

  # Você pode listar todas as rotas disponíveis com "rake routes"

  # Deixe a rota padrão com a prioridade mais baixa possível.
  # Nota: A rota padrão torna todas as actions em qualquer controller
  # acessíveis via solicitações GET. Você deve considerar a remoção
  # ou comentar esta linha se estiver usando rotas nomeadas e recursos.
  match ':controller(/:action(/:id(.:format)))'
end

[ATUALIZAÇÃO 21/12/2009 3:00]

A DSL sofreu uma leve alteração que simplifica ainda mais a especificação de rotas.

# As duas linhas a seguir fazem a mesma coisa
match 'products/:id', :to => 'catalog#view'
match 'products/:id' => 'catalog#view'

5 Comentários


  1. Olá Carlos,

    Gostei da nova sintaxe. Me tira uma dúvida… Ainda vamos ter as opções :only e :except no resources?

    Abraços

  2. Muito bom, ficou bem mais legível!

  3. olá carlos,

    agora sim, a coisa ficou boa, a parte de rotas do rails, nunca me agradou muito.

    abraço

  4. Gabriel Sobrinho,

    Eu ainda não testei, mas acredito que as opções :only e :except devem continuar funcionando normalmente.

Deixe um comentário