質問

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);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top