Faire en sorte que couchrest et couch_potato reconnaissent les documents couchdb existants
-
12-12-2019 - |
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
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);
}