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
分野?
既存の CouchDB データベースの操作方法を示す couch_potato と couchrest のドキュメントはあまり見つかりませんでした。ほとんどの例では、プロジェクトとデータベースを最初から開始することを前提としています。
ありがとう、
/floatnspace
解決
あなたが見ているとき all
あなたの見方 User
次のようなものが表示されます ruby_class == 'User'
したがって、このプロパティをドキュメントに追加しない限り、couch_potato が提供するものを回避する必要があります。つまり、couch_rest を直接使用してドキュメントを取得しますが、これはあなたが望んでいることではないと思います。
自分のドキュメントを永続化または更新し始めると、couch_potato は ruby_class
とにかくフィールド。したがって、単純な解決策は、それらをそこに追加することだと思います。
もう 1 つできることは、ドキュメントにプロパティが設定されていない場合にもドキュメントを出力するビューを作成することです。このアプローチは、couchdb に 1 種類のドキュメントしかない場合にのみ機能します。
if(!doc.ruby_class || doc.ruby_class == 'User') {
emit(doc);
}