我一直试图解释这个问题。
我有一个像这样的续集模型:
return sequelize
.define('Post',
{
title: {type : DataTypes.STRING, allowNull: false, unique: false},
subtitle: {type : DataTypes.STRING, allowNull: true},
body: {type : DataTypes.STRING, allowNull: false},
status: {type : DataTypes.STRING, allowNull: false, defaultValue: "draft"},
slug: {type : DataTypes.STRING, allowNull: false, unique: true, defaultValue: "slug"},
created_at: {type : DataTypes.DATE, allowNull: false, defaultValue: new Date()},
updated_at: {type : DataTypes.DATE, allowNull: false, defaultValue: new Date()},
published_at: {type : DataTypes.DATE, allowNull: true, defaultValue: null}
}, {
associate: function(models){
models.Post.hasMany(models.Tag);
models.Post.hasMany(models.Category);
},
instanceMethods: {
generateSlug: function(link){
this.slug = _s.slugify(link);
console.log('New Slug: '+this.slug);
return;
},
}
我用以下方法创建了一个新帖子:
'createPost': function(req, res, next){
db.Post.build({
title: req.body.post.title,
subtitle: req.body.post.subtitle,
body: req.body.post.body,
}).generateSlug(req.body.post.title).save()
.success(function(post){
console.log('Successfully created post: '+post.title);
res.json({post: post});
}).failure(function(err){
console.log('Error in creating post');
res.send(404);
});
},
这不起作用,并且对save()的调用不起作用,虽然代码确实流入generateSlug,但对this.slug的调用会产生默认值,而不是标题的slugified。
如果我更改它以便在保存模型后调用generateSlug instanceMethod,它将完美地运行:
db.Post.build({
title: req.body.post.title,
subtitle: req.body.post.subtitle,
body: req.body.post.body,
}).save()
.success(function(post){
post.generateSlug(post.title);
console.log('Successfully created post: '+post.title);
res.json({post: post});
}).failure(function(err){...
有人可以帮忙解释一下这是如何运作的吗?它与建议第一次尝试正确db.build({})。instanceMethod()。save()的文档不同。我在这里做错了吗?
提前非常感谢!