Simplicidade, dedicação e trabalho, esse é o caminho!

Rails e Javascript: Escrevendo seu próprio javascript.

Posted: December 9th, 2009 | Author: Márcio Gasparotto | Filed under: Tutorial, ruby on rails | 2 Comentários »

O integração padrão entre Ruby on Rails e Javascript sempre foi muito boa, as possibilidades com rjs, métodos que respondem javascript, json, etc. ajudam muito.

Mas o que vou falar hoje é sobre como escrever seu próprio javascript, sem depender dos helpers do rails. Na minha opinião, embora a integração existente ajude muito, quando queremos ir pouco mais fundo, ou em um projeto muito grande que exija mais do que simples chamadas ajax eu prefiro criar meu próprio javascript, isso pelo simples fato de que faço do jeito que eu quero, organizo minha biblioteca de arquivos js da forma que melhor se adapta ao projeto e tenho total controle sobre o que estou fazendo, não fico “preso” ao jeito de fazer “imposto” pelo rails.

Só um aparte neste ponto, NÃO estou dizendo que rjs é ruim pelo contrário ele ajuda muito em muitas coisas.

Bem, dito isso vamos por a mão na massa! Em primeiro lugar aviso que usarei o jquery ao inves do prototype, não vou entrar em detalhes de como configurar o jquery no rails pra isso você pode usar o jrails (eu uso).

O cenário que escolhi para esse post foi algo bem básico, só para exemplificar mesmo, imagine o seguinte: Um cadastro de produtos, esses produtos tem uma categoria e uma subcategoria, então quando eu escolher uma categoria em um select quero que o select de subcategorias seja carregado dinamicamente:

o meu controller eu adiciono o seguinte metodo: (leia os comentários no código)

Ai na view do metodo:

Por fim no meu formulário, na pagina de cadastro de produto: (leia os comentários no código)

Vejam que para o exemplo eu estou usando o formtastic, por isso o formulário um pouco diferente do convencional.

Lembre sempre de setar o método no routes.rb também

map.resources :products, :collection => { :ajax_load_sublinhas => :get }

Vejam que temos muita liberdade para fazer a coisa do nosso jeito, esse foi só um exemplo bem simples de selects dinâmicos, mas o leque de coisas que podemos fazer é o quanto a nossa imaginação permitir.

Qualquer dúvida é só comentar.

This is it!


Search + params + will_paginate

Posted: October 26th, 2008 | Author: Márcio Gasparotto | Filed under: Tutorial, ruby on rails | Tags: , , | 2 Comentários »

Depois que iniciei meu curso de ruby on rails na e-genial ministrado pelo Carlos Brando, tenho me dedicado ainda mais em conhecer e me aprofundar em rails, começar a fazer projetos realmente legais com a ferramenta e deixar de ser apenas mais um eterno iniciante ou um programador mediocre….

Esses dias estava trabalhando em um projeto pessoal, em rails é claro…rs, e precisei implantar uma busca no meu sistema, algo trivial, mas ai fui incrementar, paginar os resultados no estilo dig, etc… Nesse ponto tive alguns problemas com as rotas e na passagem de parâmetros, ai resolvi fazer esse mini tutorial de como resolvi o problema.

Se alguem conhecer uma solução melhor comenta ai.

Bem, vamos lá… Para paginar registros eu já estava usando o will_paginate, e minha solução ficou da seguinte maneira:

No meu controller (categorias_controller.rb) eu adicionei o seguinte metodo:

Como estava implantando o formulário de busca em uma tela já pronta e iria repetir esse form em vários lugares, criei um partial para o formulário da busca (_busca.html.erb).

A view (busca.html.erb) que apresenta os resultados ficou da seguinte maneira:

Observem a linha 26, quando chamo o will_paginate preciso passar como parâmetro a variável query que contem a expressão que esta sendo buscada:

No meu arquivo routes.rb eu adicionei uma collection no resouce categorias.

Veja que adicionei a :busca como sendo mais um resource de :categorias, o parametro :any significa que esse resource responderá  :get/:post/:put/:delete, eu poderia simplesmente colocar :get, uma vez que o parâmetro nesse caso só é passado via url, mas deixei como :any pra exemplificar.

Ou coisa, pra não precisar ficar definindo os labels do will_paginate em todo os lugares, acrescentei no final(depois do ultimo end) do meu arquivo environment.rb as seguintes linhas:

Ai foi só reiniciar o server e partir pro abraço!

Abraço a todos.