我试图在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"
}现在,当我从rails控制台使用我的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
发布于 2012-03-12 09:54:30
当您查看您的all视图时,您将看到类似于ruby_class == 'User'的内容,因此,除非您将此属性添加到您的文档中,否则您将需要处理couch_potato提供的内容。您可以直接使用couch_rest检索您的文档,但我不认为这是您想要的。
如果开始持久化或更新自己的文档,couch_potato将添加ruby_class字段。所以我认为简单的解决办法就是把它们加进去。
您可以做的另一件事是创建一个视图,当文档没有属性集时也会发出该视图。只有当您的couchdb中只有一种文档时,此方法才能工作:
if(!doc.ruby_class || doc.ruby_class == 'User') {
emit(doc);
}https://stackoverflow.com/questions/9661203
复制相似问题