我正在尝试针对 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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top