Frage

Ich versuche, eine grundlegende Rails-CRUD-App für eine auf Cloudant gehostete CouchDB-Datenbank zu erstellen.

Ich benutze Stubenhocker als meine Persistenzschicht und lassen Sie sie ordnungsgemäß mit meiner Cloudant-Datenbank verbinden.

Das Problem, das ich habe, ist, dass mein erstes Modell die vorhandenen Dokumente in meiner CouchDB-Datenbank nicht sieht, sofern Ich füge ein hinzu ruby_class feld, das dem Namen meines Modells entspricht.

Mein einfaches Benutzermodell:

class User
  include CouchPotato::Persistence

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

   view :all, :key => :FullName
end

Beispiel für ein CouchDB-Dokument:

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

Jetzt, wenn ich meine benutze all blick von der Rails-Konsole, ich bekomme keine Ergebnisse zurück:

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

Wenn ich das Feld und den Wert hinzufüge "ruby_class: User" zum obigen CouchDB-Dokument, dann bekomme ich Ergebnisse zurück in die Konsole:

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

Ich arbeite mit einer großen Menge von Kundendaten und möchte keine Skripte schreiben, um die hinzuzufügen ruby_class feld für jedes Dokument (und ich darf es möglicherweise nicht).

Wie kann ich meine App dazu bringen, diese vorhandenen CouchDB-Dokumente zu erkennen, ohne die hinzuzufügen ruby_class feld?

Ich konnte nicht viel Dokumentation für couch_potato und couchrest finden, die zeigt, wie man mit vorhandenen CouchDB-Datenbanken arbeitet.In den meisten Beispielen wird davon ausgegangen, dass Sie Ihr Projekt und Ihre Datenbank (en) von Grund auf neu starten.

Danke,

/ schwimmender Raum

War es hilfreich?

Lösung

wenn du auf die schaust all blick auf Ihre User sie werden so etwas sehen wie ruby_class == 'User' wenn Sie diese Eigenschaft nicht zu Ihren Dokumenten hinzufügen, müssen Sie die Funktionen von couch_potato umgehen.sie könnten z.B.verwenden Sie couch_rest direkt, um Ihre Dokumente abzurufen, aber ich denke nicht, dass dies das ist, was Sie wollen.

wenn Sie anfangen, Ihre eigenen Dokumente zu speichern oder zu aktualisieren, fügt couch_potato die hinzu ruby_class feld sowieso.ich denke also, die einfache Lösung wäre, sie einfach dort hinzuzufügen.

Sie können auch eine Ansicht erstellen, in der die Dokumente auch dann ausgegeben werden, wenn für sie die Eigenschaft NICHT festgelegt ist.dieser Ansatz funktioniert nur, wenn Sie nur eine Art von Dokument in Ihrer couchdb haben:

if(!doc.ruby_class || doc.ruby_class == 'User') {
  emit(doc);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top