Sequelize:如果在.save()之前调用InstanceMethods并不起作用

时间:2014-04-16 01:03:22

标签: sequelize.js

我一直试图解释这个问题。

我有一个像这样的续集模型:

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()的文档不同。我在这里做错了吗?

提前非常感谢!

0 个答案:

没有答案