Criando o Banco e os primeiros passos (parte 2 de x)
Posted by madruga
O site que estou fazendo é sobre os Beatles, tenho bastante material e vai ser divertido aprender fazendo este. Provavelmente deve ter uma melhor forma de se fazer algum processo, fiquem a vontade para comentar e até mesmo para dizer que estou fazendo alguma coisa errada. :-)
Para começar instalei o Couchrest:
gem install couchrest
E também instalei o Couchrest-rails, que é um plugin para conectar e trabalhar com o banco via Couchrest.
script/plugin install git://github.com/hpoydar/couchrest-rails.git vendor/plugins/couchrest-rails
Verifique como instalar e usar o plugin aqui
No environment.rb, descomente a linha do ":active_record" pois não vamos usa-lo.

Observe que o plugin gera um couchdb.yml então vamos configura-lo.

Criando um Model:

Vamos criar também:
/script/generate rspec_controller beatles
Agora no console do Rails vamos criar o banco.
>> CouchRestRails::Database.create('beatles')

No meu Model beatle.rb eu tenho:
:nome
:titulo
:historia
Então vamos criar alguns documentos para testes no console do Rails.
>> Beatle
=> Beatle
>> b = Beatle.new(:nome => "teste", :titulo => "teste2", :historia => "teste3")
=> {"titulo"=>"teste2", "nome"=>"teste", "historia"=>"teste3", "couchrest-type"=>"Beatle"}
>> b.save
=> true

Até aqui tudo ok, eu criei mais alguns documentos de testes e ficou da seguinte forma.

Observe que quando eu executei no console do Rails "Beatle.all" ele criou uma view _design/Beatle.

Eu até criei uma outra chamada "nomes" para testes.
Mas da forma que é apresentado no Futon em "All Documents" eu vejo vários IDs sem saber qual é o documento, zoado isso. Pelo próprio Futon vamos criar uma view para listar os documentos por :nome. O map é criado via javascript.

Neste caso estou salvando como "by_all". Tinha colocado "nomes" mas troquei depois.
Verificando agora no Futon > Select view, busque por "By_all" , temos os documentos melhor visualizados, dá para saber quem é quem.

Você pode criar a view também pelo modelo. Neste exemplo eu copiei o mesmo javascript que o Futon me gerou e coloquei no beatle.rb
No console do Rails execute:

Não estranhe se demorar para executar, a primeira vez que se roda a view é mais lenta. Nas próximas vezes é rapidão.
Você pode ver quantos documentos existem e etc.
>> Beatle.by_all.size
=> 4
>> Beatle.by_all.map(&:nome)
=> ["George Harrison", "John Lennon", "Paul McCartney", "Ringo Starr"]
Posso procurar por um determinado documento:
Beatle.by_all(:key => 'John Lennon')
=> [{"titulo"=>"John Lennon", "nome"=>"John Lennon", "_id"=>"84c844d09cdf55616b2e05f0095c8082", "_rev"=>"1-1643648356", "historia"=>"John" ETC ETC.
OK, agora eu quero jogar os dados na tela. Ai ai ai, agora acho que preciso de ajuda. Se você souber uma melhor forma de se fazer isso me avise rss.
Então lá voi eu, no controller beatles_controller.rb eu fiz uma busca por "John Lennon".

Em minha index.html.erb eu apenas chamei a variável: @lennon
Vamos iniciar o WEBrick e acessar o browser para ver o que aconteceu!

http://xxxcnn2574.hospedagemdesites.ws:3000/beatles/

OPA!!! As informações não vieram do jeito que eu esperava, mas para um primeiro momento eu fiquei bastante contente. Observe que eu ainda nem usei uma "reduce", só usei uma função "map". Este conceito é bastante novo para mim e admito que é TRETA, você literalmente precisa deixar de lado tudo que conhece sobre DBs e começar do zero. No próximo artigo pretendo explorar mais os map/reduce, preciso fazer a lição de casa rss, trabalhar melhor com meus métodos e organizar melhor a saída dos dados na tela. Tenho a letra de todas as músicas dos Beatles, vou ter que criar um script Ruby para popular o CouchDB.
Até a próxima!






Fala Madrugão, beleza meu camarada? Ai, muito bom o post!
Concordo contigo, esse papo de map/reduce é treta parceiro! Também to estudando essa bagaça e vo ficar de olho no próximo post ai!
Parabéns brother!
Obs.: E ai, quando vem ao Rio ?
Abraçø
Bom post vou criar uma app com couchdb … http://rubyongenio.com
Fala Thiago, vai ser difícil eu ir pro Rio mano.. Os caras estão derrubando helicóptero ae velho, foda demais. Vou passar minhas férias no Irã, lá morre menos gente. rss.. brincadeira, quem sabe um dia apareço por aí. []`s