4
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] has no method '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)
            });

        });
4

3 回答 3

4

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

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

它们也不支持关联(否则在这种情况下很有用)

GitHub 问题 #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 消息等)

于 2013-11-06T22:29:20.243 回答
2

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

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

user.save(function(error) {
  console.log(error)
});
于 2013-11-05T03:13:09.693 回答
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) {
  });           
});
于 2014-04-22T08:49:44.290 回答