Pergunta

Eu estou tentando criar uma base Trilhos aplicativo CRUD contra um banco de dados CouchDB hospedado no Cloudant.

Eu estou usando couch_potato como a minha camada de persistência e de tê-lo conectando-se adequadamente para o meu Cloudant banco de dados.

Os problemas que eu estou tendo é o meu primeiro modelo não ver os documentos existentes em meu banco de dados CouchDB, a menos que Adicionar um ruby_class campo, que é igual ao nome do meu modelo.

Minha simples modelo de Usuário:

class User
  include CouchPotato::Persistence

   property :id, :type => Fixnum
   property :FullName, :type => String

   view :all, :key => :FullName
end

Exemplo de documento CouchDB:

{
  "_id": 123456,
  "_rev": "4-b96f36763934ce7c469abbc6fa05aaf3",
  "ORGID": 400638,
  "MyOrgToken": "19fc342d50f9d8df1ecd5e5404f5e5f7",
  "FullName": "Jane Doe",
  "Phone": "555-555-5555",
  "MemberNumber": 123456,
  "Email": "jane@example.com",
  "LoginPWHash": "14a3ccc0e6a50135ef391608e786f4e8"
}

Agora, quando eu uso o meu all vista a partir do console do rails, eu não tenho resultados:

1.9.2-p290 :002 > CouchPotato.database.view User.all
=> []

Se eu adicionar o campo e o valor "ruby_class: User" acima CouchDB documento, então eu obter resultados no console:

1.9.2-p290 :003 > CouchPotato.database.view User.all
=> [#<User _id: "123456", _rev: "4-b96f36763934ce7c469abbc6fa05aaf3", created_at: nil,       
   updated_at: nil, id: "123456", FullName: "Jane Doe">]

Eu estou trabalhando com um grande conjunto de dados de clientes, e eu não quero escrever scripts para adicionar o ruby_class campo para cada documento (e eu não pode ser permitido).

Como posso obter meu aplicativo para reconhecer esses existente CouchDB documentos sem adicionar o ruby_class de campo?

Eu não conseguia encontrar muita documentação para couch_potato e couchrest que mostra como trabalhar com os já existentes, bancos de dados CouchDB.A maioria dos exemplos partem do princípio de que você está começando seu projeto de banco de dados e(s) a partir do zero.

Obrigado,

/floatnspace

Foi útil?

Solução

quando você está olhando para o all vista o seu User você vai ver algo como ruby_class == 'User' assim, a menos que você adicione esta propriedade de seus documentos, você terá que trabalhar em torno do que couch_potato oferece.você poderia por exemplo,use couch_rest diretamente para recuperar seus documentos, mas eu não acho que isso que você deseja.

se você começar a persistência ou a atualização de seus próprios documentos, couch_potato irá adicionar o ruby_class campo de qualquer maneira.então eu acho que a simples solução seria apenas para adicioná-los lá.

outra coisa que você pode fazer é criar um modo de exibição que emite os documentos também quando eles NÃO têm a propriedade definida.esta abordagem só vai funcionar se você tiver apenas um tipo de documento em couchdb:

if(!doc.ruby_class || doc.ruby_class == 'User') {
  emit(doc);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top