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

时间:2013-07-02 19:11:18

标签: meteor

我是 Meteor.js 的新手,我发现文档有点难以理解。

我开始使用一个非常简单的应用程序,只需单击一个按钮,即可允许用户将现有的游戏添加到他们的个人资料中。 游戏存储在另一个Meteor Collection中。

在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}});
    }
});

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

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)});
    }
});

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

1 个答案:

答案 0 :(得分:6)

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

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

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

Meteor.methods({
    addGame: function(gameId) {
        Meteor.users.update(Meteor.userId(), { $addToSet: { games: gameId }});
    }
});