0

数日間、forEach ループを Meteor で動作させる方法を見つけようとしています。質問を推測する人のために、QuestionList2 つの配列 ( ) を持つコレクションがあります。usersTrue usersFalse両方の配列を調べて、質問に答えるときにユーザーのスコアを変更したいと考えています。私は本当に近いと思いますが、2 つのコレクションの 1 つを間違って呼び出しています。

QuestionList問題集へのリンクとUserList接続先の2つのコレクションMeteor.users

私は出版物を持っています

Meteor.publish('activeQuestions', function(){
return QuestionList.find({ });
});

Meteor.publish('userNotAnswered', function(){
var currentUserId = this.userId;
return QuestionList.find({active: true, usersTrue: {$nin: [currentUser]}, 
    usersFalse: {$nin: [currentUser]}});
});

Meteor.publish('userAnswer', function(){
var currentUserId = this.userId;
return UserList.find({_id: currentUserId});
});

質問に答えるときの管理者側のテンプレートがあります。modifyQuestionStatusいくつかのパラメーターを指定してメソッドを呼び出します。

Template.activeQuestionList.events({
'click [data-action=questionTrue]': function() {

    // Select the id of the yes button that is clicked
    var questionId = this._id;
    Session.set('answered', questionId);

    // Get the session
    var answered = Session.get('answered');

    // Update the database without losing any data
    Meteor.call('modifyQuestionStatus', answered, true);

},
'click [data-action=questionTrue]': function() {
    // Select the id of the yes button that is clicked
    var questionId = this._id;
    Session.set('answered', questionId);

    // Get the session
    var answered = Session.get('answered');

    // Update the database without losing any data
    Meteor.call('modifyQuestionStatus', answered, false);
}

});

最後に私は方法を持っています

    'modifyQuestionStatus' : function(questionId, answer){
    QuestionList.update(questionId, {$set: {active: false, answer: answer}});
    var base = QuestionList.find({_id: questionId});
    if (answer === true) {
        base.usersTrue.forEach(function (user) {
            user.update(secret, {$set: {coins: 100}} );
        });
        base.usersFalse.forEach(function (user) {
            user.update(secret, {$set: {coins: -100}} );
        });
    } else {
        usersFalse.forEach(function (user) {
            UserList.update(secret, {$set: {coins: 100}} );
        });
        usersTrue.forEach(function (user) {
            UserList.update(secret, {$set: {coins: -100}} );
        });
    }
},

secret は、コインが格納される配列です。

コードが完全ではないことはわかっていますが、クリーンアップする前にコードを機能させたいと考えています。十分な情報を入れたと思います。私はプログラミングが初めてなので、質問に答えるのに役立つ何かが欠けている場合はお知らせください。

4

2 に答える 2