我正在尝试使用ember-data和一个node.js后端的Ember应用程序,使用Sequelize.js从MySQL提供数据。
我的问题: 如果我有一个通过hasMany与Post模型关联的Comment模型,则ember-data的预期JSON看起来像
{
"post": {
"comment_ids": [1, 2, 3]
}
}
使用sequelize来查询/生成此JSON而没有昂贵的循环等的最佳方法是什么?
Comment模型有一个带有post_id的外键。
答案 0 :(得分:2)
我去实现它:
// include comments
Post.all({
where: "..",
include: [Comment]
}).success(function(posts) {
// collect IDs
_.each(posts, function(element) {
element["comments"] = _.pluck(element.comments, 'id');
});
});
答案 1 :(得分:1)
我建议将降压传递给客户。您可以设置自定义序列化程序客户端,将数据重新格式化为ED的预期格式。此外,ED希望采用以下格式:
{
"post": {
"comments": [1, 2, 3]
}
}
App.Post = DS.Model.extend({
comments = DS.hasMany('comment')
});
或者如果您选择在回复中包含评论
{
"post": {
"id": 1
"title": "Rails is omakase",
"comments": ["1", "2"],
"_links": {
"user": "/people/dhh"
},
},
"comments": [{
"id": "1",
"body": "Rails is unagi"
}, {
"id": "2",
"body": "Omakase O_o"
}]
}
您可以在此处详细了解:https://github.com/emberjs/data/blob/master/TRANSITION.md
在某些时候,某人将不得不循环(或迭代),并且通过迭代结果集来构建响应(或序列化响应客户端)并不是一种不常见的做法。