Получение Couchrest и Couch_potato для распознавания существующих документов CouchDB.

StackOverflow https://stackoverflow.com//questions/9661203

Вопрос

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

я использую лежебока в качестве моего уровня персистентности и правильно подключить его к моей базе данных 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 просмотр из консоли рельсов, я не получаю никаких результатов:

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

Это было полезно?

Решение

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

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

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

if(!doc.ruby_class || doc.ruby_class == 'User') {
  emit(doc);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top