2015-09-30 2 views
1

Я использую средний стек (монго/мангуст, угл, угловой узел).не может получить свойство объекта из объектаID, переданного формой html

База данных содержит 2 схемы

var ChildSchema = new Schema({ 
    childName: { 
     type: String, 
     required: true, 
     trim: true 
    } 
}); 


var ParentSchema = new Schema({ 
    parentName: { 
     type: String, 
     required: true, 
     trim: true 
    }, 
    child: { 
     type: Schema.ObjectId, 
     ref: 'Child' 
    } 
}); 

mongoose.model('Parent', ParentSchema); 
mongoose.model('Child', ChildSchema); 

Существует HTML-form, что позволяет пользователю создавать новый Parent, форма имеет поле выбора, который заполняется с детьми, хранящихся в базе данных и извлекаемых findChildren() функция.

HTML, здесь:

<section data-ng-controller="ParentController" data-ng-init="findChildren()" > 
    <form name="parentForm" class="form-horizontal col-md-6" role="form" data-ng-submit="create(parentForm.$valid)" novalidate> 
     <div class="form-group" ng-class="{ 'has-error' : submitted && parentForm.config.$invalid }"> 
      <label for="child" class="col-md-2 control-label">child</label> 
      <div class="col-md-9"> 
       <select ng-model="parent.child" ng-options="child as child.childName for child in childs"></select> 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-3 col-md-9"> 
       <button mean-token="'create-submit'" type="submit" class="btn btn-info">Submit</button> 
      </div> 
     </div> 
    </form> 
</section> 

HTML-form показывает детские имена, как выбираемые элементы в списке и, когда пользователь нажимает кнопку отправки, контроллер в приложении узел получает правильный родительский идентификатор объекта , Вот код контроллера

create: function(req, res) { 
     var parent = new Parent(req.body); 

     parent.save(function(err) { 
      if (err) { 
       return res.status(500).json({ 
        error: 'Cannot save the parent' 
       }); 
      } 

      res.json(parent); 
     }); 
    } 

вопрос в том, что я не в состоянии отобразить ChildName при попытке показать список родителей в таблице. Вот HTML. Все родители другая информация отображается

<section data-ng-controller="DevicesController" data-ng-init="findParents()"> 
    <table border="1" class="mytable"> 
     <tr> 
      <td>oject</td> 
      <td>Parent Name</td> 
      <td>Child</td> 
     </tr> 

     <tr ng-repeat="parent in parents"> 
      <td>{{parent}}</td> 
      <td>{{parent.parentName}}</td> 
      <td>{{parent.child.childName}}</td> 
     </tr> 
    </table> 
</section> 

Ожидается, что parent.child.childName отобразит ChildName ссылочного объекта. он возвращает нуль. если я отображать 'parent.child', он будет отображать ObjectId

Например:

У меня есть ребенок под названием ChildA.

Когда я просматриваю форму html для создания родителя, я введу ParentA для имени и выбираю ChildA из списка.

Когда я нажимаю кнопку «Отправить», будет создан новый объект «Родитель».

Когда я просматриваю родительский список, таблица, которая отображается, должна показывать строку с ParentA и ChildA.

Сейчас он показывает ParentA и пустой

ответ

0

parent.child вернуться бы objectid, который является правильным, вам нужно использовать populate, если вы хотите, чтобы получить подробную информацию о вашей ссылке.

Я не вижу relavent код findParents, вы в принципе сделать что-то, как показано ниже:

child.findOne({"_id": req.params.id}).populate('parent').exec(function (err, child) { 
       if (err) { 
        res.status(403).json({ 
         "status": "403", 
         "data": "Forbidden" 
        }); 
       } else { 
        res.status(200).json({ 
         "status": "200", 
         "message": "Success", 
         "data" : child 
        }); 
       } 
    }); 
+1

ах. это был вопрос новичков. спасибо @Thalaivar. Я неправильно использовал функцию заполнения. после исправления, все работает хорошо! благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^