CouchDB com Rails

O que vcs estão usando para trabalhar com CouchDB com Rails?
ActiveCouch? CouchREST?

Achei o ActiveCouch legal, porque ele é integra com Rails, mas está a quase 1 ano sem commit algum, acho que o projeto esta parado (sim poderia fazer um fork, mas isso é outra história rs) e não sei o quanto ele esta funcional. Os outros achei que se tem ainda um pouco de trabalho para se fazer o uso básico do banco, tem algum pulo do gato ai será pra facilitar a vida que to não sabendo? rs

[]s

Eu nunca usei o couchdb com Rails, vou fazer isso em um próximo projeto e já dei umas pesquisadas. O que eu descobri até agora foi:

  1. Já ouvi algumas pessoas desencorajando usar o active-couch, porque ele te faz usar o couchdb de um jeito artificial, já que o active record foi feito pra ser usado com bancos relacionais. Se eu fosse começar um novo projeto usando couchdb hoje, começaria pesquisando o couchrest.

  2. No Planet CouchBD quase todo mundo usa rails. :slight_smile: Dá uma pesquisada nos blogs do pessoal de lá.

  3. No site do confreaks eu já vi algumas apresentações sobre couchdb (com e sem rails), mas aí ce vai ter que procurar em qual evento que estão as apresentações. :stuck_out_tongue:

Eu acho o CouchRest o melhor:

http://leandrosilva.com.br/2009/08/02/5-minutos-de-couchdb-e-couchrest

A ImproveIT usa CouchRest também:

http://tapajos.me/2009/7/19/falando-um-pouco-sobre-couchdb

E nesse tem diversas implementações de wiki com todas as gems diponíveis para trabalhar com CouchDB:

Leandro, vc tem algum exemplo de uso de documentos aninhados com o CouchRest, mas na parte das telas?

To dando uma imperrada em como trabalhos com essas “listas” na interface.

vlw!

Fala Luz!

Putz, não tenho nenhum exemplo, cara. Mas, documentos aninhados são apenas hashs dentro de um hash, então, você poderia os acessar facilmente. Tipo, sei lá, algo assim:

puts cliente[:nome]

cliente[:telefones].each do |tel|
  puts tel[:numero]
  puts tel[:ddd]
end

Bem, não sei se é bem isso que você queria, é?

Mas também tem um coisa, se você tiver usando CouchRest, você pode usar ExtendedDocument também, daí não precisa usar sintaxe de hash. Fica um pouco mais limpinho o código.

http://github.com/jchris/couchrest/blob/master/examples/model/example.rb

Abraço!

A zica ta sendo no .erb.html mesmo… mas vou fazer uns testes que acho que já peguei o lance rs

http://blog.improveit.com.br/articles/2009/09/14/ruby-on-rails-com-couchdb-usando-couchrest

Eu achei esse screeshot muito legal diferente do 5 minutos com rails ele cria objetos CouchRest::ExtendedDocument ai fica trivial

pessoa = Pessoa.new {:nome => "ovelha", :tipo => "programador doido"}
pessoa.save

Já vai fazer a chama Restful ao couchDB

ai a classe pessoa ganha o metodo get para se usar com o id o couchDB

pessoa = Pessoa.get '3uqt8039485609234ut0239452309845092u3t02'

No screeshot ele tb mostra objetos aninhados.

Vou aproveitar esse topico e fazer uma pergunta.

Achei muito estranho esse comportamento da api. Vejam o codigo:

require 'rubygems'
require 'couchrest'

def testCouchRest

    db = CouchRest.database! 'http://localhost:5984/banco'
    attributes = {:nome => "ovelha", :tipo => "Programador doido"}
    result = db.save_doc attributes
    puts result['rev']
    puts result['id']

end

testCouchRest

funciona perfeitamente mas se eu alterar as ultimas linhas para

    puts result[:rev]
    puts result[:id]

o programa para de funcionar, o stdout do programa passa a ser nil e nil, apesar de inserir corretamente no couchdb.

Alguem tem idéia do prq isso acontece??

Deveria funcionar não deveria??

auto resposta, não deveria não esse é o comportamento normal dos hash em ruby

hash = {"id" => "coisa"}
puts hash[:id] #nil
puts hash['id'] #coisa

hash.symbolize_keys!
puts hash[:id] #coisa