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.
Para incluir no meu No meu controller (produtos_controller.rb) para busca tambem de um categoria como ficaria, poderia dar uma luz! Grato
Opa!
Então, os parâmetros são passados através de un hash, logo você poderia usar algo assim:
{:query => params[:query], :category => params[:category_id] } %>
E no seu controller também tem que chamar o parametro dentro da sua query.
Se aceita uma dica, de uma olhada neste projeto: http://wiki.github.com/thoughtbot/squirrel
Ele facilita bem a formulação de querys mais “complexas” e inclusive já tem total integração com o will_paginate.
Abraço!