Получение couchrest и couch_potato для распознавания существующих документов couchdb - PullRequest
0 голосов
/ 12 марта 2012

Я пытаюсь создать базовое приложение Rails CRUD для базы данных CouchDB, размещенной на Cloudant.

Я использую couch_potato в качестве слоя персистентности и правильно подключаю его к моей базе данных Cloudant.

Проблемы, с которыми я сталкиваюсь, состоят в том, что моя первая модель не увидит существующие документы в моей базе данных CouchDB, , если Я не добавлю поле ruby_class, которое соответствует названию моей модели.

Моя простая пользовательская модель:

class User
  include CouchPotato::Persistence

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

   view :all, :key => :FullName
end

Пример документа 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"
}

Теперь, когда я используюмой all вид из консоли rails, я не получаю никаких результатов:

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

Если я добавлю поле и значение "ruby_class: User" в вышеупомянутый документ CouchDB, то я получу результаты обратно вконсоль:

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

Я работаю с большим набором данных о клиентах и ​​не хочу писать сценарии для добавления поля ruby_class в каждый документ (и я не могуразрешено).

Как я могу заставить свое приложение распознавать эти существующие документы CouchDB без добавления поля ruby_class?

Я не смог найти много документации для couch_potato и couchrest, которая показывает, как работать с существующимиБазы данных CouchDB.В большинстве примеров предполагается, что вы запускаете свой проект и базы данных с нуля.

Спасибо,

/ floatnspace

1 Ответ

0 голосов
/ 12 марта 2012

когда вы смотрите на all вид вашего User, вы увидите что-то вроде ruby_class == 'User', поэтому, если вы не добавите это свойство в свои документы, вам нужно будет обойти то, что предоставляет couch_potato.то есть вы можете использовать couch_rest напрямую для получения ваших документов, но я не думаю, что это то, что вам нужно.

если вы начнете сохранять или обновлять свои собственные документы, couch_potato все равно добавит поле ruby_class.поэтому я думаю, что самым простым решением было бы просто добавить их туда.

Еще одна вещь, которую вы можете сделать, - это создать представление, которое будет выдавать документы, даже если для них НЕ установлено свойство.этот подход будет работать только в том случае, если у вас есть только один вид документа в вашем couchdb:

if(!doc.ruby_class || doc.ruby_class == 'User') {
  emit(doc);
}
...