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.
Marcio
Para incluir no meu No meu controller (produtos_controller.rb) para busca tambem de um categoria como ficaria, poderia dar uma luz! Grato
Márcio Gasparotto
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!