Pregunta

Estoy intentando crear una aplicación Rails CRUD básica en una base de datos CouchDB alojada en Cloudant.

Estoy usando flojo como mi capa de persistencia y hacer que se conecte correctamente a mi base de datos de Cloudant.

El problema que tengo es que mi primer modelo no ve los documentos existentes en mi base de datos CouchDB. a menos que agrego un ruby_class campo que es igual al nombre de mi modelo.

Mi modelo de usuario simple:

class User
  include CouchPotato::Persistence

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

   view :all, :key => :FullName
end

Documento de muestra de 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"
}

Ahora, cuando uso mi all vista desde la consola de Rails, no obtengo ningún resultado:

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

Si agrego el campo y el valor "ruby_class: User" al documento CouchDB anterior, luego obtengo los resultados en la consola:

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">]

Estoy trabajando con un gran conjunto de datos de clientes y no quiero escribir ningún script para agregarlos. ruby_class campo a cada documento (y es posible que no se me permita hacerlo).

¿Cómo puedo hacer que mi aplicación reconozca estos documentos CouchDB existentes sin agregar el ruby_class ¿campo?

No pude encontrar mucha documentación para Couch_potato y Couchrest que muestre cómo trabajar con bases de datos CouchDB existentes.La mayoría de los ejemplos suponen que está iniciando su proyecto y sus bases de datos desde cero.

Gracias,

/espacio flotante

¿Fue útil?

Solución

cuando estás mirando el all vista de tu User verás algo como ruby_class == 'User' entonces, a menos que agregue esta propiedad a sus documentos, necesitará solucionar lo que proporciona Couch_potato.podrías es decirUtilice Couch_rest directamente para recuperar sus documentos, pero no creo que sea esto lo que desea.

Si comienza a persistir o actualizar sus propios documentos, Couch_potato agregará el ruby_class campo de todos modos.así que creo que la solución más sencilla sería simplemente agregarlos allí.

Otra cosa que puedes hacer es crear una vista que emita los documentos también cuando NO tengan la propiedad establecida.Este enfoque sólo funcionará si tienes un solo tipo de documento en tu CouchDB:

if(!doc.ruby_class || doc.ruby_class == 'User') {
  emit(doc);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top