更新 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 个选项:

  1. 将数据作为 post 请求的正文发送。在请求正文中将数据作为 json 对象发送

Post /person/1 body: { "books": [1002,1003]}

  1. 覆盖蓝图更新方法

添加此 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);
    });
  });
}