Ottenere Couchrest e Couch_potato per riconoscere i documenti di Couchdb esistenti
-
12-12-2019 - |
Domanda
Sto cercando di creare un'app crudo di base su rotaie contro un database di Couchdb ospitato su Nutorant.
Sto usando couch_potato come il mio strato di persistenza e averlo collegato correttamente al mio database nuvoloso.
I problemi che sto avendo è il mio primo modello non vedrà i documenti esistenti nel mio database di Couchdb, a meno che aggiungo un campo ruby_class
che equivale al nome del mio modello.
Il mio semplice utente modello:
.
class User
include CouchPotato::Persistence
property :id, :type => Fixnum
property :FullName, :type => String
view :all, :key => :FullName
end
Campione Couchdb Documento:
.
{
"_id": 123456,
"_rev": "4-b96f36763934ce7c469abbc6fa05aaf3",
"ORGID": 400638,
"MyOrgToken": "19fc342d50f9d8df1ecd5e5404f5e5f7",
"FullName": "Jane Doe",
"Phone": "555-555-5555",
"MemberNumber": 123456,
"Email": "jane@example.com",
"LoginPWHash": "14a3ccc0e6a50135ef391608e786f4e8"
}
Ora, quando utilizzo la mia vista all
dalla console dei binari, non ottengo alcun risultato indietro:
.
1.9.2-p290 :002 > CouchPotato.database.view User.all
=> []
Se aggiungo il campo e il valore "ruby_class: User"
al documento di Couchdb sopra, quindi ottengo i risultati nella 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">]
Sto lavorando con un ampio set di dati del cliente e non voglio scrivere alcun tipo di script per aggiungere il campo ruby_class
a ogni documento (e potrei non essere autorizzato a).
Come posso ottenere la mia app per riconoscere questi documenti di couchdb esistenti senza aggiungere il campo ruby_class
?
Non riesco a trovare molta documentazione per Couch_potato e Couchrest che mostra come lavorare con i database di Couchdb esistenti. La maggior parte degli esempi si suppone di iniziare il tuo progetto e il tuo database da zero.
Grazie,
/ floatnspace
Soluzione
Quando stai guardando la vista all
del tuo User
vedrai qualcosa come ruby_class == 'User'
, quindi a meno che non aggiungi questa proprietà ai tuoi documenti dovrai lavorare intorno a ciò che fornisce couch_potato.Potresti I.e. Utilizzare Couch_rest direttamente per recuperare i tuoi documenti, ma non penso che questo sia quello che vuoi.
Se inizi a persistere o aggiornando i propri documenti, Couch_potato aggiungerà comunque il campo ruby_class
.Quindi penso che la soluzione Simples sarebbe semplicemente aggiungerle lì.
Un'altra cosa che puoi fare è creare una vista che emette i documenti anche quando non hanno il set di proprietà.Questo approccio funzionerà solo se hai solo un tipo di documento nel tuo couchdb:
if(!doc.ruby_class || doc.ruby_class == 'User') {
emit(doc);
}
.