2011-12-21 2 views
0

Aidez-moi à résoudre ce problème. J'ai environ 1500 documents dans mon CouchDB, chaque document appartient à l'un des types ('Enquête' et 'Réponse').Comment accéder aux documents CouchDB en utilisant le modèle CouchRest

J'ai besoin solution pour followings

1] Nécessité d'afficher le document Ids (_id) dans une liste déroulante qui a le type de document (documentType) comme 'Enquête'

2] Si je sélectionne un élément (_id) dans le menu déroulant, je dois afficher tous les documents Ids (_id) dans la zone de liste qui appartient à l'ID sélectionné (_id sélectionné dans la liste déroulante)

J'ai 1500 le total des documents comme celui-ci

{ 
    "_id": "ff2fb2554682ba613c2f83c63502808a", 
    "_rev": "4-dd559696434a402739e789ccc8c9a481", 
    "answers": [ 
     { 
      "answers": [ 
       "Aug 19,2011" 
      ], 
      "questionId": "50f3df434ae02ac7fff48c1c2bde83e4" 
     }, 
     { 
      "answers": [ 
       "Bechu Yadav" 
      ], 
      "questionId": "15504f006e58872fd94871fe0c9d32ad" 
     }, 
     { 
      "answers": [ 
       "35" 
      ], 
      "questionId": "3c447a2f5cc6ca1985ce2c81463a3c47" 
     }, 
     { 
      "answers": [ 
       "Male" 
      ], 
      "questionId": "a6df7c25602939554612ef6de762f5b9" 
     }, 
     { 
      "questionId": "2f66155965e60094f23f01af531d5af1", 
      "subAnswers": [ 
       { 
        "questionId": "1dae2d86eef846c967254c9e369170ce" 
       }, 
       { 
        "questionId": "40ffeb4d33dab1fe8d2d8b73c02ed13b" 
       }, 
       { 
        "questionId": "2db1e8b6e97d5baa8935b9b31fcc9648" 
       }, 
       { 
        "questionId": "0f8bb9f91ea8085b4ffb839ee8deabb5" 
       }, 
       { 
        "questionId": "22a93ecb72c50ff8899f8b2937776e51" 
       }, 
       { 
        "questionId": "e5106384790c2be745c952c4b867a0ff" 
       } 
      ] 

      "questionId": "492cf9bd41257ea478c5222fbba06616" 
     } 
    ], 
    "createdAt": "2011-08-19T21:05:36.486+0000", 
    "createdBy": "user4", 
    "documentType": "Response", 
    "ipAddress": "42.110.85.67", 
    "location": { 
     "latitude": 26.8415613, 
     "longitude": 75.8222883, 
     "provider": "network" 
    }, 
    "surveyId": "6df022f0f371752167ad4920b38e1c37", 
    "published": true 
} 

Et mon modèle CouchRest ressemble comme suit

class Android < CouchRest::Model::Base 
    property :description, String 
    property :_id, String 
    property :_rev, String 
    property :documentType, String 

    design do 
     view :by_documentType,:map =>"function(doc){if (doc.documentType == 'Survey') {emit(doc._id);}}" 
     view :by_createdBy 
    end 
end 

Mais quand j'accéder by_documentType il est de retour nul

Android.find_by_documentType('Survey') 

Répondre

1

Merci amis!

J'ai finalement trouvé la réponse, j'ai changé mon modèle comme suit

require 'couchrest_model' 

class Android < CouchRest::Model::Base 

    property :description, String 
    property :_id, String 
    property :_rev, String 
    property :documentType, String 
    property :surveyId, String 

    design do 
    view :by_document_type,:map =>"function(doc) {if (doc.documentType == \"Survey\") {emit([doc._id,doc.title], 1);}}",:reduce=>"function(keys, values, rereduce) {return sum(values);}" 
    view :by_surveyId,:map =>"function(doc) {emit([doc.surveyId], 1);}",:reduce=>"function(keys, values, rereduce) {return sum(values);}" 
    end 
end 

Et maintenant en mesure d'appeler ce point de vue, au besoin. suivant retourne tous les documents qui a le type de document « enquête »

Android.by_document_type.rows 

et basée sur la sélection numéro d'enquête, je peux récupérer tous les documents qui appartient à numéro d'enquête sélectionnée, comme suit

Android.by_surveyId.key('Selected Survey ID goes here').rows 
0

Essayez Android.by_documentType.key ('enquête')

+0

J'ai essayé, mais il est renvoyer une vue au lieu des résultats. Ca revient comme ça '# " Survey "}, @ name =" by_documentType ">' –

Questions connexes