Madruga

Criando o Banco e os primeiros passos (parte 2 de x)

Posted by madruga Mon, 19 Oct 2009 19:15:09 GMT

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!

Comments

  1. Avatar thiagodiogo.blogspot.com said about 13 hours later:

    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çø

  2. Avatar Carlos Eugênio said about 14 hours later:

    Bom post vou criar uma app com couchdb … http://rubyongenio.com

  3. Avatar Madruga said about 18 hours later:
    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

(leave url/email »)

   Comment Markup Help Preview comment