我的风帆很多很多协会已经停止保存更改,也就是说,如果我取消选中我的复选框列表中的一个项目,或者选择一个新项目,则不会保存更改(填充到连接表中)。
它过去常常起作用,虽然我不确定它被打破了多长时间。
页面上的所有其他字段都可以正确保存。
所以我知道大多数的机制是正确的,只有多对多关联,即更新连接表中的活动记录列表。
我保存中可能出错的任何提示?
我有以下型号:
/**
* 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');
}
});
答案 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');
};
});
});