在Meteor.js中将数组对象添加到Users集合

Ram*_*ier 1 meteor

我对Meteor.js很新,我发现文档有点难以理解.

我从一个非常简单的应用程序开始,用户可以通过单击按钮简单地允许用户将现有游戏添加到他们的个人资料中.该游戏存储在另一个流星集合.

在rails中,我只想创建一个has_and_belongs_to_many关系,但这不是Meteor的工作方式.我认为最好的方法是在创建用户帐户时添加一个空数组 - 然后,当他们点击"添加游戏"按钮时,它会将游戏的标题传递给用户数组.

我在/server/users.js文件中有这个:

Accounts.onCreateUser(function(options, user){
    user.games = [];
    return user;
});

Meteor.methods({
    addGame: function(title) {
        Meteor.users.update(Meteor.userId(), { $addToSet: { games: title}});
    }
});
Run Code Online (Sandbox Code Playgroud)

我正在调用addGame我的/client/views/games/games_list.js文件中的方法:

Template.gamesList.events({
    'click .add-to-chest-btn': function(e){
        var title = $(e.target).attr('name');
        e.preventDefault();
        Meteor.call('addGame', title, function(title){ console.log(title)});
    }
});
Run Code Online (Sandbox Code Playgroud)

我是在正确的轨道上还是有更好的方法来做到这一点?

Ze *_*ibe 6

你是在正确的轨道上,但是声明一个数组而不是一个对象:

Accounts.onCreateUser(function(options, user){
    user.games = [];
    return user;
});
Run Code Online (Sandbox Code Playgroud)

直接推送值而不是对象,并使用$addToSet以避免重复,以防gameId多次推送相同的值:

Meteor.methods({
    addGame: function(gameId) {
        Meteor.users.update(Meteor.userId(), { $addToSet: { games: gameId }});
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 另外,将回调更改为`function(error,title){console.log(title)}`,否则您正在读取`error`字段而不是`result`字段,如果没有错误,则为'undefined`字段 (2认同)
  • 你不确定.执行以下操作:`function(error,user){console.log(user.games)}` - 假设你的`addGame`方法将用户记录返回给客户端 (2认同)