很多很多协会都没有保存

时间:2017-03-15 07:18:54

标签: save many-to-many sails.js waterline

我的风帆很多很多协会已经停止保存更改,也就是说,如果我取消选中我的复选框列表中的一个项目,或者选择一个新项目,则不会保存更改(填充到连接表中)。

它过去常常起作用,虽然我不确定它被打破了多长时间。

页面上的所有其他字段都可以正确保存。

所以我知道大多数的机制是正确的,只有多对多关联,即更新连接表中的活动记录列表。

我保存中可能出错的任何提示?

我有以下型号:

/**
* User.js
*/

module.exports = {
    attributes: {
        projects: {
            collection: 'project',
            via: 'users'
        },
    }

/**
* Project.js
*/

module.exports = {

attributes: {
    users: {
        collection: 'user',
        via: 'projects',
        dominant: true
    },
}

在我的表单中,我将返回一个类似

的复选框列表
{ projectname: 'AS Story Database',
  userlist: [ '10', '3', '1' ], <-- this line is the many to many line from the check boxs
  projecttype: 'Development',
  companyid: '1',
  startdate: 'Sat Jan 01 2011 00:00:00 GMT+1100 (AUS Eastern Daylight Time)',
  enddate: '' }
}

我尝试填充结果集

Project.findOne({'id':id})
    .populate('users') <--------- heres the populate I added but didnt seem to have effect
    .exec(function(err,project){

这是我的风帆控制器中的保存对话框

var a=req.param('project',null);
    console.log(a); <-- note this is where the json above is output
    project.projecttype= a.projecttype,
    project.projectname= a.projectname,
    project.companyid= a.companyid,
    project.users= a.userlist, <-- this is the many to many association that used to work
    project.startdate = a.startdate,
    project.enddate = a.enddate

    project.save(function(err,updated){ <-- here is the save function
        if (err) {
            req.session.flash = {'err':err};
            sails.controllers.project.edit(req,res);
        }else{
            req.session.flash = {};
            res.redirect('project/index');
        }
    });

2 个答案:

答案 0 :(得分:1)

@Sangharsh在上面的评论中是正确的;您无法通过为其分配数组并调用.save()来更新集合。你可能会想到.update(),它在Sails v0.12.x中允许你提供一个对象数组来替换现有的集合(虽然这已经在Sails 1.0中删除了,因为它引起了很多错误和混乱)。

在Sails v0.12.x中更新现有实例集合的正确方法是使用.add().remove()方法。有关详细信息,请参阅many-to-many associations doc page

在Sails 1.0中,已删除单个记录的.save()方法以使事情更清晰;您始终使用.addToCollection().removeFromCollection().replaceCollection()模型类方法来操纵多个关联。

答案 1 :(得分:-1)

确定;我终于想通了。 上面的方法(replaceCollection)仅适用于旧的(0.x)版本的帆。

要使其在现代版本中运行,请使用

<model>.update('id':<the recordID>},{'<association name>':<list of new records>})
.exec(function(err,updated){
    -do something-
});

即 -

Project.update({'id':id},{'users': a.userlist}).exec(function(err,updated){
    project.save(function(err,updated){
        //console.log(updated);
        if (err) {
            console.log(err);
            req.session.flash = {'err':err};
            sails.controllers.project.edit(req,res);
        }else{
            req.session.flash = {};
            res.redirect('project/index');
        };
    });
});