Busca fácil on Rails
Após algumas buscas e testes encontrei um projeto chamado Searchlogic. A primeira impressão foi muito boa: de cara já vejo o projeto com uma ampla documentação disponível. Bastaram algumas linhas de código para conseguir o que eu queria!
Com base nesse resultado positivo, resolvi compartilhar aqui a minha experiência fazendo uma pequena explicação sobre como integrar o Searchlogic ao seu site.
Passo 1: Instalação do Searchlogic: Você pode fazer a instalação usando o RubyGems ou instalando com um plugin dentro do seu projeto.
Instalação como gem:
sudo gem install searchlogic
# e depois adicione ao config/environment.rb
config.gem "searchlogic"
Instalação como plugin:
script/plugin install git://github.com/binarylogic/searchlogic.git
Passo 2: Faça a busca! É isso mesmo, já está “tudo no jeito” para você fazer a sua busca. Uma busca simples seria:
@search = Model.new_search( params[:q] )
@items, @items_count = @search.all, @search.count
O que esse código faz é buscar registros a partir do seu modelo (Model no exemplo) e colocar o resultado em duas variáveis: uma com a coleção de registros e outra com a quantidade retornada. Mais fácil impossível.
Passo 3: Personalizando sua busca: se você quiser, e você provavelmente quer, você pode especificar quais campos devem ser pesquisados ou quais as condições devem ser atendidas. Tudo isso é muito simples de ser feito e pode ser definido de duas formas: você pode usar um hash com as opções e condições (similar ao que fazemos com o tradicional find) ou uma abordagem mais orientada a objetos. Exemplos simulando uma busca de carros:
Passando um hash:
Car.all(
:conditions => {
:name_contains => 'ford', # name like '%ford%'
},
:per_page => 10
:page => params[:page],
rder_by => 'year',
rder_as => 'DESC',
)
Ou como um objeto:
search = Car.new_search
search.conditions.name_contains = 'ford'
search.per_page = 10
search.page = params[:page]
search.order_by = 'year'
search.order_as = 'DESC'
search.all # execute
Simples não? E isso é só o começo, na documentação do projeto há muitos outros exemplos e possibilidades!
Comments
Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!
