Fala rapazeada... Hoje algumas notas sobre rotas:
1º- Diferença entre member e collection:
map.resources :notas, :member => { :baixar => :get }A rota para collection será: "/notas/baixar". E para member será necessário informar um id, assim: "/notas/2/baixar"
map.resources :notas, :collection => { :baixar => :get }
2º - Herança:
Da mesma forma que é preciso informar na model quando uma tabela depende da outra, assim:
class Pessoa < ActiveRecord::Base;end class Telefone < ActiveRecord::Base; belongs_to Pessoa; end
É necessário fazer suas relações nas rotas, assim:
map.resources :pessoas do |pessoa|
pessoa.resources :telefones
end
Ficando assim:
---------------------------------------------------------------------------------------------------------------------------------------------
| Método | Rota | Chamada |
---------------------------------------------------------------------------------------------------------------------------------------------
| new_pessoa GET | /pessoas/new | {:action=>"new", :controller=>"pessoas"} |
| formatted_new_pessoa GET | /pessoas/new.:format | {:action=>"new", :controller=>"pessoas"} |
| edit_pessoa GET | /pessoas/:id/edit | {:action=>"edit", :controller=>"pessoas"} |
| formatted_edit_pessoa GET | /pessoas/:id/edit.:format | {:action=>"edit", :controller=>"pessoas"} |
| pessoa GET | /pessoas/:id | {:action=>"show", :controller=>"pessoas"} |
| formatted_pessoa GET | /pessoas/:id.:format | {:action=>"show", :controller=>"pessoas"} |
| pessoa_telefones GET | /pessoas/:pessoa_id/telefones | {:action=>"index", :controller=>"telefones"} |
| formatted_pessoa_telefones GET | /pessoas/:pessoa_id/telefones.:format | {:action=>"index", :controller=>"telefones"} |
| POST | /pessoas/:pessoa_id/telefones | {:action=>"create", :controller=>"telefones"} |
| POST | /pessoas/:pessoa_id/telefones.:format | {:action=>"create", :controller=>"telefones"} |
| new_pessoa_telefone GET | /pessoas/:pessoa_id/telefones/new | {:action=>"new", :controller=>"telefones"} |
| formatted_new_pessoa_telefone GET | /pessoas/:pessoa_id/telefones/new.:format | {:action=>"new", :controller=>"telefones"} |
| edit_pessoa_telefone GET | /pessoas/:pessoa_id/telefones/:id/edit | {:action=>"edit", :controller=>"telefones"} |
| formatted_edit_pessoa_telefone GET | /pessoas/:pessoa_id/telefones/:id/edit.:format | {:action=>"edit", :controller=>"telefones"} |
| pessoa_telefone GET | /pessoas/:pessoa_id/telefones/:id | {:action=>"show", :controller=>"telefones"} |
| formatted_pessoa_telefone GET | /pessoas/:pessoa_id/telefones/:id.:format | {:action=>"show", :controller=>"telefones"} |
| PUT | /pessoas/:pessoa_id/telefones/:id | {:action=>"update", :controller=>"telefones"} |
| PUT | /pessoas/:pessoa_id/telefones/:id.:format | {:action=>"update", :controller=>"telefones"} |
| DELETE| /pessoas/:pessoa_id/telefones/:id | {:action=>"destroy",:controller=>"telefones"} |
| DELETE| /pessoas/:pessoa_id/telefones/:id.:format | {:action=>"destroy",:controller=>"telefones"} |
---------------------------------------------------------------------------------------------------------------------------------------------
3º - Namespace
Nao sei pra que serve... mas tivemos a necessidade de usa-lo pois, numa mesma estrutura de aplicativo existiam dois projetos. Ou seja, para identificar quais controllers sao usadas em um projeto e quais sao usadas em outro, voce pode suar o namespace, assim:
map.namespace(:projeto_um) do |um|
# rotas do projeto um
um.resources :pessoas
end
Dessa forma todos as controllers que são do projeto um, ficam numa pasta dentro de controllers chamada projeto_um e assim para o projeto_dois, ou quantos namespace eu tiver. Isso é válido para toda a estrutura da aplicação ou seja para views será necessário ter uma pasta nomeada com o namespace (projeto_um) com as respectivas views e assim por diante.
Isso ficará da seguinte forma:
http://localhost/projeto_um/pessoas
Ou seja, para todas as rotas eu terei o namespace na frente.
E quando eu tiver uma unica controller válida para os dois projetos, que namespace colocar na rota?
Vamos imaginar que no projeto um eu tenho a controller telefones que pode ser usada no projeto dois também... você pode fazer da seguinte forma:
map.namespace(:projeto_um) do |um|
um.resources :telefones, :namespace => nil
end
map.namespace(:projeto_dois) do |dois|
um.resources :telefones, :namespace => nil
end
Assim a controller telefone será acessada de qualquer namespace: projeto_um ou projeto_dois.
Lembrando que a controller e as views de telefone deverão ser posta fora das pastas que englobam os arquivos especificos de cada projeto. Ou seja, a controller telefone ficará dentro do diretorio controller.
É isso... não tem muito segredo, caso pareça o contrário aqui tudo o que você pode aprender sobre rotas, dentro das magias e convenções de RUBY ON RAILS.
Fica assim entao, rapazeada. Duvidas, correcoes, reclamações e/ou sugestoes fiquem a vontade para informar.
Abraço.
Ae rapazinho, agora soh falta trabalhar 100% com isso neh... hahahaha nada de HighGambys!
ResponderExcluirUAhuAHuAH.
abraço!