سؤال

أحاول إنشاء تطبيق Rails CRUD أساسي مقابل قاعدة بيانات CouchDB المستضافة على Cloudant.

أنا استخدم محب للجلوس كطبقة الثبات الخاصة بي وجعلها متصلة بشكل صحيح بقاعدة بيانات 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 الحالية.تفترض معظم الأمثلة أنك تبدأ مشروعك وقاعدة بياناتك من البداية.

شكرًا،

/floatnspace

هل كانت مفيدة؟

المحلول

عندما تنظر إلى all عرض الخاص بك User سترى شيئا من هذا القبيل ruby_class == 'User' لذا، ما لم تقم بإضافة هذه الخاصية إلى مستنداتك، فسوف تحتاج إلى التعامل مع ما توفره الأريكة_البطاطس.يمكنك أياستخدم Couch_rest مباشرة لاسترداد المستندات الخاصة بك، ولكن لا أعتقد أن هذا هو ما تريده.

إذا بدأت في استمرارية المستندات الخاصة بك أو تحديثها، فسيقوم الأريكة_البطاطس بإضافة ملف ruby_class الميدان على أية حال.لذلك أعتقد أن الحل البسيط هو إضافتها هناك.

شيء آخر يمكنك القيام به هو إنشاء طريقة عرض تُرسل المستندات أيضًا عندما لا تحتوي على مجموعة الخصائص.لن يعمل هذا الأسلوب إلا إذا كان لديك نوع واحد فقط من المستندات في الأريكة الخاصة بك:

if(!doc.ruby_class || doc.ruby_class == 'User') {
  emit(doc);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top