Busca fácil on Rails

Durante as férias escolares que se aproximam, planejo dar continuidade ao projeto que iniciei no Yahoo! Hack Day desse ano. A idéia é fazer um calendário + mapa de eventos. :)

Aproveitei um tempo de folga essa semana e resolvi implementar uma busca nos eventos cadastrados. Fiz um rascunho que como seria a busca e pensei: "ok, agora não quero reinventar a roda, será que existe algum plugin/gem que facilite a criação de páginas de busca?"

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],
   :o rder_by => 'year',
   :o 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!

comentários (1)

Rails Summit Latin America - Dia 1

Foi uma decisão em cima da hora mas acabei indo ao Rails Summit Latin America (decidi ontem =). Confesso que gostei bastante da maioria das apresentações que assisti hoje. Sendo assim, registro aqui breves comentários e notas (não avaliações) sobre o que vi.

Abertura com Gilberto Mautner, da Locaweb: contou um pouco da história da Locaweb, como ela surgiu e qual caminho ela seguiu até se tornar o que é hoje. Inclusive comentou as motivações que o levaram a optar por suportar Rails nos seus planos de hospedagem.

Pra quem ainda não conhece, ou conhece pouco, o Ruby on Rails, ele deixou duas ótimas sugestões: a leitura do livro "Agile Web Development with Rails" e ver o vídeo sobre como criar um blog em 15 minutos.

Chad Fowler: fez uma ótima apresentação sob o título "Being remarkable". Entre vários tópicos, sugeriu a leitura do livro "Purple cow", que, em síntese, mostra como transformar seu negócio sendo notável. Nota mental: comprar este livro =).

Além disso, ele exibiu um gráfico dizendo que, no geral, temos cinco níveis de programadores. O segundo nível, os "iniciantes avançados" ("advanced beginners" no original) é o grupo que concentra o maior número de pessoas e é o nível onde a maioria das pessoas também para (seria "pára" mas acho que com as novas regras gramaticais fica sem acentuação). Daí pode se concluir que quem ser notável deve ir além de um "iniciante avançado".

Carlos Brando, da Surgeworks: contou como é a experiência de trabalhar remotamente para uma empresa estrangeira. Além disso, fez uma ótima comparação sobre programadores "especialistas" vs. "generalistas". Sobre esse último tópico concluiu dizendo que você deve ser sim, especialista em alguma tecnologia, mas também generalista para conhecer outros paradigmas.

Chris Wanstrath, do GitHub: o conteúdo foi bastante interessante e teria sido uma ótima apresentação, exceto por um detalhe: ele leu toda a apresentação! Se você quiser saber o que ele falou, palavra por palavra, veja este documento no GitHub.

Birds of a Feather: foi uma apresentação diferente, onde as pessoas da platéia podiam ir até o palco e falar sobre qualquer assunto relacionado a Ruby on Rails. Gostei do formato diferenciado, deu pra conhecer vários projetos e idéias legais. Destaque para a apresentação super engraçada do Elomar França. Se alguém gravou, com certeza vai virar um hit na internet. :D

Além disso tudo, durante o dia ainda "trombei" com vários "Railers" da blogosfera brasileira: Nando Vieira, Ronaldo Ferraz, Arthur Geek, George Guimarães, entre outros.

Bom, por hoje é isso. Tá na hora de ir pra cama pois amanhã tem mais, muito mais. :D

comentários (4)

Personalizando a div.fieldWithErrors do Rails

Dica rápida para o Rails. Sabe aquela div.fieldWithErrors que aparece em volta dos campos com erros de validação? Você pode alterá-la com facilidade e até sumir com ela de vez. =)

O Nando Vieira publicou um texto ensinando como fazer div.fieldWithErrors desaparecer. Porém, no meu caso eu queria algum elemento indicando o erro, mas gostaria que ele fosse uma tag span, por exemplo.

A solução é essa:

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
  "<span class=\"fieldWithErrors\">#{html_tag}</span>"
end

Basta adicionar esse trecho de código no seu config/environment.rb. =)

comentários (1)

Último dia da oficina de Javascript e Ajax

A oficina de Ajax que começou no dia 1 deste mês acabou hoje, dia 17. Nestes vários dias de curso/oficina deu pra abordar vários temas, desde os fundamentais para o bom entendimento da linguagem até o uso prático e produtivo do Javascript.

Durante esse período mostrei desde a sintaxe base da linguagem, passando por manipulação de CSS e DOM, eventos e listeners, até chegar no tão falado Ajax. E no último dia ainda deu tempo de apresentar a ótima biblioteca jQuery sob o tópico produtividade.

Ah, tirei uma foto com o pessoal que participou da oficina:

Na foto estão os alunos da oficina e eu, quase no centro, de camisa azul.

Espero que todos possam ter aprendido pelo menos algo de novo e interessante. Aproveito para agradecer a presença de todos, que se esforçaram pra acordar cedo mesmo durante as férias letivas. Bom, agora deixa eu mostrar a foto para minha mãe... =)

Gostei de ministrar essas oficinas, e já estou até pensando qual pode ser o tema da oficina de verão, no final do ano? LAMP? Ruby on Rails? Só o tempo dirá... :D

comentários (4)

« Textos anteriores Textos mais recentes »