0

Cloudant でホストされている CouchDB データベースに対して基本的な Rails CRUD アプリを作成しようとしています。

パーシスタンス・レイヤーとしてcouch_potatoを使用しており、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すべてのドキュメントにフィールドを追加するスクリプトを書きたくありません (許可されていない可能性があります)。

ruby_classフィールドを追加せずに、これらの既存の CouchDB ドキュメントをアプリに認識させるにはどうすればよいですか?

既存の CouchDB データベースを操作する方法を示した、couch_potato とcouchrest に関するドキュメントはあまり見つかりませんでした。ほとんどの例では、プロジェクトとデータベースをゼロから開始することを前提としています。

ありがとう、

/floatnspace

4

1 に答える 1

0

このプロパティをドキュメントに追加しない限り、 couch_potatoが提供するものを回避する必要がありますall。つまり、couch_rest を直接使用してドキュメントを取得できますが、これはあなたが望むものではないと思います。Userruby_class == 'User'

独自のドキュメントの永続化または更新を開始すると、couch_potato はruby_classとにかくフィールドを追加します。だから私は単純な解決策はそこにそれらを追加することだと思います.

あなたができるもう1つのことは、プロパティが設定されていないときにもドキュメントを発行するビューを作成することです。このアプローチは、couchdb に 1 種類のドキュメントしかない場合にのみ機能します。

if(!doc.ruby_class || doc.ruby_class == 'User') {
  emit(doc);
}
于 2012-03-12T09:54:30.097 に答える