Search + params + will_paginate
Posted: October 26th, 2008 | Author: Márcio Gasparotto | Filed under: Tutorial, ruby on rails | Tags: rails, Tutorial, will_paginate | 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.