2015-03-03 6 views
0

У меня в настоящее время модель модели и комментариев модели. Комментарии появились из новостей ид X так новостей с комментариями ID 5 нагрузки с идентификатором 5.Sails js model association

Мои модели выглядит следующим образом

module.exports = { 

    tableName: 'raggaer_aac_news', 
    autoCreatedAt: false, 
    autoUpdatedAt: false, 
    attributes: { 
     id: { 
      type: 'integer', 
      primaryKey: true, 
     }, 
     title: { 
      type: 'string', 
      defaultsTo: '', 
      required: true 
     }, 
     text: { 
      type: 'string', 
      defaultsTo: '', 
      required: true 
     }, 
     getComments: { 

      required: false, 
      model: 'Comments' 
     } 
    } 
}; 


module.exports = { 

    tableName: 'raggaer_aac_comments', 
    attributes: { 

     id: { 

      required: true, 
      type: 'integer', 
      primaryKey: true 
     }, 
     created_by: { 

      type: 'string', 
      required: 'true' 
     }, 
     comment: { 

      type: 'string', 
      required: 'comment', 
      unique: true, 
      minLength: 10, 
      maxLength: 100 
     } 
    } 
} 

Так что на мой контроллер, что я должен делать? как вы видите, я примерил News модели, добавив атрибут getComments, но это только показывает мне каждый раз ошибки я загрузить элемент «не может прочитать свойство длины не определено»

Мой контроллер выглядит следующим образом

News.findById(req.param('id')).exec(function(err, data) { 

     if(data.length === 0) { 

      return res.redirect('/'); 
     } 

     return res.view('home/news', {info: data[0]}); 
    }); 

Как я могу сделать так, чтобы функция также читала комментарии от comments_table?

ответ

1

Для этого sails.js имеет populate функция.

Таким образом, вы, вероятно, следует сделать:

News.findById(req.param('id')).populate('getComments').exec(function(err, data) { 
    // code ... 
}); 
+0

И как это сопрягая таблицу комментарии? так как Im получение getCOmments: undefined –

1

Вам нужно, чтобы ваша модель новости эталонные комментарии как коллекции, а затем сделать как @glenSwift предложил и использовать метод заселить

news.js

module.exports = { 

    tableName: 'raggaer_aac_news', 
    autoCreatedAt: false, 
    autoUpdatedAt: false, 
    attributes: { 
     id: { 
      type: 'integer', 
      primaryKey: true, 
     }, 
     title: { 
      type: 'string', 
      defaultsTo: '', 
      required: true 
     }, 
     text: { 
      type: 'string', 
      defaultsTo: '', 
      required: true 
     }, 
     comments: { 

      required: false, 
      collection: 'comments', 
      via: 'news' 
     } 
    } 
}; 

comments.js

module.exports = { 

    tableName: 'raggaer_aac_comments', 
    attributes: { 

     id: { 

      required: true, 
      type: 'integer', 
      primaryKey: true 
     }, 
     created_by: { 

      type: 'string', 
      required: 'true' 
     }, 
     comment: { 

      type: 'string', 
      required: 'comment', 
      unique: true, 
      minLength: 10, 
      maxLength: 100 
     }, 
     news: { 
      model:'news', 
      required: true 
     } 
    } 
} 

в контроллере

News.findById(req.param('id')).populate('comments').exec(function(err, data) { 
    // code ... 
}); 
+0

И показывает, что ассоциация выполнена? Im также получаю комментарии: [] –

+0

Я мог бы порекомендовать некоторое чтение, вы можете заполнить ассоциации несколькими способами. http://sailsjs.org/#!/documentation/concepts/ORM/Associations/OnetoMany.html https://github.com/balderdashy/waterline-docs/blob/master/associations.md – Meeker