让 couchrest 和 couch_potato 识别现有的 couchdb 文档
-
12-12-2019 - |
题
我正在尝试针对 Cloudant 上托管的 CouchDB 数据库创建一个基本的 Rails CRUD 应用程序。
我在用着 沙发土豆 作为我的持久层,并使其正确连接到我的 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 数据库。大多数示例假设您从头开始您的项目和数据库。
谢谢,
/浮动空间
解决方案
当你看着 all
你的看法 User
你会看到类似的东西 ruby_class == 'User'
因此,除非您将此属性添加到文档中,否则您将需要解决 couch_potato 提供的内容。你可以,即直接使用 couch_rest 检索您的文档,但我认为这不是您想要的。
如果您开始保留或更新自己的文档,couch_potato 将添加 ruby_class
无论如何,领域。所以我认为最简单的解决方案就是将它们添加到那里。
您可以做的另一件事是创建一个视图,当文档没有设置属性时,该视图也会发出文档。仅当您的 couchdb 中只有一种文档时,此方法才有效:
if(!doc.ruby_class || doc.ruby_class == 'User') {
emit(doc);
}