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

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.


2 Comments on “Search + params + will_paginate”

  1. 1 Marcio said at 10:13 am on August 14th, 2009:

    Para incluir no meu No meu controller (produtos_controller.rb) para busca tambem de um categoria como ficaria, poderia dar uma luz! Grato

  2. 2 Márcio Gasparotto said at 10:38 am on August 15th, 2009:

    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!


Leave a Reply