[RoR] – Entendo rotas e R.E.S.T - Parte 2

20 out 2011(há 14 anos)
DevelopmentRuby on Rails
#ruby-on-rails#resources#only#nested-resources#menber#helper#gravatar#format#except#collection#admin

Parte 2 - Continuando...

Olá pessoal, como tinha falado no ultimo post, rotas ainda não foi concluido, hoje to de volta para dar continuidade a algumas coisas sobre rotas, bem vamos lá...

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...