Sails.js - 如何更新嵌套模型

时间:2013-11-05 00:39:05

标签: javascript node.js sails.js

attributes: {
    username: {
        type: 'email', // validated by the ORM
        required: true
    },
    password: {
        type: 'string',
        required: true
    },
    profile: {
        firstname: 'string',
        lastname: 'string',
        photo: 'string',
        birthdate: 'date',
        zipcode: 'integer'
    },
    followers: 'array',
    followees: 'array',
    blocked: 'array'
}

我目前注册用户,然后在注册后更新个人资料信息。如何将配置文件数据添加到此模型?

我在别处读过push方法应该有效,但事实并非如此。我收到此错误:TypeError:Object [object Object]没有方法'push'

        Users.findOne(req.session.user.id).done(function(error, user) {

            user.profile.push({
                firstname : first,
                lastname : last,
                zipcode: zip
            })

            user.save(function(error) {
                console.log(error)
            });

        });

3 个答案:

答案 0 :(得分:4)

@Zolmeister是正确的。 Sails仅支持以下模型属性类型

string, text, integer, float, date, time, datetime, boolean, binary, array, json

他们也不支持关联(在这种情况下可能会有用)

GitHub Issue #124

你可以通过绕过风帆并使用mongo的原生方法来解决这个问题:

Model.native(function(err, collection){

    // Handle Errors

    collection.find({'query': 'here'}).done(function(error, docs) {

        // Handle Errors

        // Do mongo-y things to your docs here

    });

});

请记住,他们的垫片是有原因的。绕过它们将删除一些在幕后处理的功能(将id查询转换为ObjectIds,通过套接字发送pubsub消息等)。

答案 1 :(得分:2)

目前Sails不支持嵌套模型定义(据我所知)。您可以尝试使用'json'类型。 在那之后你只需要:

user.profile = {
  firstname : first,
  lastname : last,
  zipcode: zip
})

user.save(function(error) {
  console.log(error)
});

答案 2 :(得分:1)

回复太迟了,但对于其他人(作为参考),他们可以这样做:

Users.findOne(req.session.user.id).done(function(error, user) {
  profile = {
            firstname : first,
            lastname : last,
            zipcode: zip
      };
  User.update({ id: req.session.user.id }, { profile: profile},         
        function(err, resUser) {
  });           
});