Question

J'essaie de créer une application Rails CRUD de base sur une base de données CouchDB hébergée sur Cloudant.

j'utilise patate de sofa comme couche de persistance et connectez-la correctement à ma base de données Cloudant.

Le problème que je rencontre est que mon premier modèle ne verra pas les documents existants dans ma base de données CouchDB, sauf si j'ajoute un ruby_class champ qui équivaut au nom de mon modèle.

Mon modèle utilisateur simple :

class User
  include CouchPotato::Persistence

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

   view :all, :key => :FullName
end

Exemple de document 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"
}

Maintenant, quand j'utilise mon all vue depuis la console rails, je n'obtiens aucun résultat :

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

Si j'ajoute le champ et la valeur "ruby_class: User" au document CouchDB ci-dessus, puis j'obtiens les résultats dans la 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">]

Je travaille avec un grand nombre de données client et je ne souhaite pas écrire de scripts pour ajouter le ruby_class champ à chaque document (et je ne serai peut-être pas autorisé à le faire).

Comment puis-je faire en sorte que mon application reconnaisse ces documents CouchDB existants sans ajouter le ruby_class champ?

Je n'ai pas trouvé beaucoup de documentation pour couch_potato et couchrest qui montre comment travailler avec les bases de données CouchDB existantes.La plupart des exemples supposent que vous démarrez votre projet et vos bases de données à partir de zéro.

Merci,

/espace flottant

Était-ce utile?

La solution

quand tu regardes le all vue de votre User tu verras quelque chose comme ruby_class == 'User' donc, à moins que vous n'ajoutiez cette propriété à vos documents, vous devrez contourner ce que propose couch_potato.tu pourrais c'est-à-direutilisez couch_rest directement pour récupérer vos documents, mais je ne pense pas que ce soit ce que vous voulez.

si vous commencez à conserver ou à mettre à jour vos propres documents, couch_potato ajoutera le ruby_class champ de toute façon.donc je pense que la solution simple serait simplement de les ajouter ici.

une autre chose que vous pouvez faire est de créer une vue qui émet les documents également lorsqu'ils n'ont PAS la propriété définie.cette approche ne fonctionnera que si vous n'avez qu'un seul type de document dans votre couchdb :

if(!doc.ruby_class || doc.ruby_class == 'User') {
  emit(doc);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top