更新 Sails 中的关联
Updating association in Sails
我正在使用 SailsJs。存在两种模型。模型 'person' 包含以下属性:
books: {
collection: 'book',
via: 'owner'
},
模型 'book' 包含:
owner: {
model: 'person'
},
当我创建一个人的实例时,我可以使用 http 请求并简单地输入类似下面的内容
Post /person?books=1001,1002
只要 1001 和 1002 是书的有效 ID,就可以。
但是,当我尝试对人的书籍属性进行设置时,这不起作用
Post /person/1?books=1002,1003
id 为 1 的人的书变空了。
但是,
Post /person/1?books=1002
会起作用。
这是为什么?如何修改 collection 属性?
使用 blueprints API 更新模型有 2 个选项:
- 将数据作为 post 请求的正文发送。在请求正文中将数据作为 json 对象发送
Post /person/1
body: { "books": [1002,1003]}
- 覆盖蓝图更新方法
添加此 PersonController.js:
update: function (req, res) {
Person.findOne(req.param('id')).populate('books').exec(function (err, person){
if (err) {
sails.log.error(err);
return;
}
var books = req.param('books').split(',').map(function (book){return parseInt(book);}),
booksToRemove = _.difference(person.books.map(function(book) {return book.id;}), books);
// Remove books that are not in the requested list
person.books.remove(booksToRemove);
// Add new books to the list
person.books.add(books);
person.save(function (err, r) {;
res.json(r);
});
});
}
我正在使用 SailsJs。存在两种模型。模型 'person' 包含以下属性:
books: {
collection: 'book',
via: 'owner'
},
模型 'book' 包含:
owner: {
model: 'person'
},
当我创建一个人的实例时,我可以使用 http 请求并简单地输入类似下面的内容
Post /person?books=1001,1002
只要 1001 和 1002 是书的有效 ID,就可以。
但是,当我尝试对人的书籍属性进行设置时,这不起作用
Post /person/1?books=1002,1003
id 为 1 的人的书变空了。
但是,
Post /person/1?books=1002
会起作用。
这是为什么?如何修改 collection 属性?
使用 blueprints API 更新模型有 2 个选项:
- 将数据作为 post 请求的正文发送。在请求正文中将数据作为 json 对象发送
Post /person/1
body: { "books": [1002,1003]}
- 覆盖蓝图更新方法
添加此 PersonController.js:
update: function (req, res) {
Person.findOne(req.param('id')).populate('books').exec(function (err, person){
if (err) {
sails.log.error(err);
return;
}
var books = req.param('books').split(',').map(function (book){return parseInt(book);}),
booksToRemove = _.difference(person.books.map(function(book) {return book.id;}), books);
// Remove books that are not in the requested list
person.books.remove(booksToRemove);
// Add new books to the list
person.books.add(books);
person.save(function (err, r) {;
res.json(r);
});
});
}