Получение Couchrest и Couch_potato для распознавания существующих документов CouchDB.
-
12-12-2019 - |
Вопрос
Я пытаюсь создать базовое приложение 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);
}