Pular para o conteúdo principal

Rails: Rotas


Fala rapazeada... Hoje algumas notas sobre rotas:

1º- Diferença entre member e collection:

map.resources :notas, :member => { :baixar => :get }
map.resources :notas, :collection => { :baixar => :get }
A rota para collection será: "/notas/baixar". E para member será necessário informar um id, assim: "/notas/2/baixar"

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.

Comentários

  1. Ae rapazinho, agora soh falta trabalhar 100% com isso neh... hahahaha nada de HighGambys!

    UAhuAHuAH.
    abraço!

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Números Primos + MMC + MDC + Ruby

Segue abaixo um exemplo de implementação de gerador de Números Primos + MMC ( Mínimo Múltiplo Comum ) + MDC ( Máximo Divisor Comum ) em ruby. É um resultado de uma prova de lógica que um amigo meu teve que fazer em java. Colaborações prestimosas de Cirillo Ferreira. require 'Mathn' class Numeric def multiplos(ate = 500) (1..ate).to_a.map{|v| self*v} end def divisores(ate = 500) (1..ate).to_a.map{|v| v if (self%v == 0)}.compact end end module Math def self.mmc(*valor) compara( valor.inject([]){|h, i| h << i.multiplos} ).first end def self.mdc(*valor) compara( valor.inject([]){|h, i| h << i.divisores } ).last end def self.nmr_primos numeros_primos = [] (2..501).each{|i| numeros_primos << (2..i).detect{|j| j%j ==0 && i%j==0} } numeros_primos.uniq! end private def self.compara(arr) arr.inject(arr[0]){|ac, i| ac & i} end end Math::mmc(3,5,8) => 120 Math::mmc(3,5,8,9) => 360 Os métodos mmc e mdc são métodos que aceitam parâmetros indetermi

Naturalismo (1870-1900)

Naturalismo é uma escola literaria, vertente do realismo também definido como o realismo extremo. Procura explicar cientificamente (com negação do sentimento e da metafísica) a conduta e o modo de ser dos seres por meio dos fatores externos e da natureza biológica e sociológica. "Os seres são como produtos, como consequência de forças preexistente que limitam a sua responsabilidade e os tornam, nos casos extremos, verdadeiros joguetes das condições. [...] o efeito das taras, das doenças, dos vícios, na formação/desvio do caráter juntando-lhes os efeitos complementares da formação familiar, da educação, do nível cultural." Antonio Candido e José Aderaldo Castello "O Romantismo era a apoteose do sentimento; - o Realismo é a anatomia do caráter. É a crítica do homem. É a arte que nos pinta a nossos próprios olhos - para condenar o que houve de mau na nossa sociedade." Eça de Queirós Teorias: Zoomofismo Determinismo do meio Evolucionismo Eugenia Naturalismo

Rails3 + Ruby1.9 + Dalli (memcache-client)

Após a revolução  cientifico-tecnológico, vivemos agora a terceira revolução industrial, a revolução feita a partir da informação. Dai a importância dos computadores, do meio técnico (a infraestrutura), e por conseguinte - e reservando suas proporções, a ferramenta mencached -- Gem memcache-client não implementa Rails3 app mais. É necessário, agora, usar a poética gem: Dalli . Caso sua aplicação use muita sessão (como a minha). Com certeza terá um problema com a nova gem do memcached. O serializer do Dalli é o Marshal. (Você pode alterar para o qual você quiser: yajl-ruby , ...).  Loading .... Leia também: bashar3a (in English) Revolução Técnico-ciêntifico-informacional Prof. Milton Santos Salvador Dali Surrealismo