[RoR] – Entendo rotas e R.E.S.T - Parte 2
20 out 2011(há 13 anos)Parte 2 - Continuando...
Trabalhando com um membro ou coleção
resources :posts do member do post :confirm get :notify end collection do get :search end end
Bem no código acima o member
é quando você trata de um único membro, no exemplo você confirma e notifica apenas um post, então, as rotas ficariam deste modo:/posts/1/confirm
/posts/1/notify
Ou seja, você trabalha com apenas um objeto post.
Já o collection
é para dizer que você vai trabalhar com uma coleção de posts, no exemplo, a rota fica:/posts/search
O que significa que você não está se referindo a um único objeto post, mas a uma coleção de objetos post.
Ainda é possível fazer isso de uma maneira mais enxuta, como no exemplo abaixo:
resources :posts do post :confirm, :on => :member get :notify, :on => :member get :search, :on => :collection end
Este exemplo equivale ao primeiro exemplo
Rotas aninhadas - nested resources
Producer::Application.routes.draw do |map| ... resources :posts do resources :comments, :only => [:created] end end
No exemplo acima está a um trecho de código onde todas as actions de post poderá ser renderizada. E aninhada a post apenas a action created
de comments poderá ser renderizada, isso gerando todos os helpers de urls commetados na parte 1 deste post se caso retiramos :only => [:created]
Namespaces
Producer::Application.routes.draw do |map| namespace :admin do resources :posts resources :post_categories, :except => [:show] end ...
Esse código está excluindo apenas a action show
de categories e vai gerar as seguintes rotas:/admin/posts(.:format)
/admin/posts/new(.:format)
/admin/posts/:id/edit(.:format)
/admin/posts/:id(.:format)
/admin/categories(.:format)
/admin/categories/new(.:format)
/admin/categories/:id/edit(.:format)
/admin/categories/:id(.:format)
Named routes
Vamos supor que é necessário criar uma rota especifica seja rest ou não, que necessita usar um helper diferente então usamos rotas nomeadas (named routes).
Producer::Application.routes.draw do |map| match '/prices', :to => "pages#prices", :as => :prices # ou match '/prices' => "pages#prices", :as => :prices # parâmetro opcional match "/about(.:format)" => "pages#about", :as => :about ...
Com esse código ao digitar na url /prices
o rails executará a action prices do controller pages e quando digitar /about
o rails executará a action about do controller pages, podendo ainda usar assim /about.xml
Conclusão
Depois deste post ainda falaremos de rotas, mas para colocar em prática tudo que foi falado nesse e no post anterior, se você ainda tem duvidas sobre de algum de nossos posts leiam novamente, mas se você entendeu todos faça o download de nossa versão até agora ou teste online a ultima versão
Bem pessoal é isso em breve estarei aqui, nessa mesma hora e nesse mesmo canal...