我目前有一个新闻模型和评论模型。评论显示在X id新闻中,因此对于id为5的新闻加载评论为id 5。
我的模特看起来像这样
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
}
}
}
所以在我的控制器上该怎么办?如你所见,我尝试在新闻模型中添加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中的注释?
答案 0 :(得分:1)
为此目的,sails.js具有populate功能。
所以,你应该这样做:
News.findById(req.param('id')).populate('getComments').exec(function(err, data) {
// code ...
});
答案 1 :(得分: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 ...
});