2015-11-04 53 views
2

我有一個模板事件,允許用戶將內容插入Meteor數據庫的集合中。調用方法 'insertChallenge',只是調用ChallengesList.insert(challenge_info)時數據庫更新不起作用流星法

var challenge_info = { 
     "creator_id": Meteor.userId(), 
     "creator_firstname": creat_firstname, 
     "creator_avatarurl": Session.get('chUser').avatar_url, 
     "recepient_id": recepient_id, 
     "recepient_firstname": recepient_firstname, 
     "recepient_avatarurl": recepient_avatarurl, 
     ... 
     "state": 0 
    }; 

    Meteor.call('insertChallenge', challenge_info); 

    Meteor.call('incrementStatistic', Meteor.userId(),'c_sent'); 
    Meteor.call('incrementStatistic', recepient_id,'c_pending'); 

    Session.set('new_challenge_reset', true); 

    Router.go('home'); 

一切工作正常。

但是當試圖調用'incrementStatistic'方法時,沒有任何反應。終端不會給我任何錯誤,而且我無法在瀏覽器控制檯上測試查詢(從客戶端更新數據庫,但沒有在Meteor中選擇是不可能的,並且我已經刪除了自動發佈)。

這裏有方法(內Meteor.methods()):

incrementStatistic : function(user_id, stat){ 
    UserStatistics.update({"user_id": user_id}, {"$inc" : {stat: 1}}); 
}, 
decrementStatistic : function(user_id, stat){ 
    UserStatistics.update({"user_id": user_id}, {"$inc" : {stat: 1}}); 
}, 
createStatistics : function(){ 
    UserStatistics.insert({'user_id': Meteor.userId(), 'c_won': 0, 'c_lost': 0, 'c_accepted': 0 , 'c_rejected': 0, 'c_pending': 0, 'c_sent': 0}); 
    return true; 
} 

我能夠檢索收集信息(在另一個模板),使用UserStatistics.findOne({"user_id": Meteor.userId()});,但增加的幅度永遠不會奏效。

雖然可能沒有這個問題做的,我也有一個使用Collection.update(),它工作得很好的服務器方法(儘管它使用_id爲選擇):

updateChallengeState: function(challenge_id, new_challenge_state){ 
    ChallengesList.update({_id: challenge_id}, {"$set" : {"state": new_challenge_state}}); 
} 

任何人對可能發生的事情有任何線索?

+0

你確定服務器方法被調用,用戶記錄在userstatistics存在之前是否存在? – Sasikanth

+0

什麼不工作?如果您可以在不同模板中檢索用戶數據並且數據正確,那麼這些'incrementStatistic'調用正在更新數據庫。你有沒有更新你的模板的問題?也許你需要顯示你的模板html和helpers。 –

+0

@Sasikanth,是的。創建新帳戶時,我使用'createStatistics'方法創建記錄,並且記錄存在並且填充良好。 –

回答

0

您似乎還沒有定義在這些方法中傳遞的user_id變量(incrementStatisticdecrementStatistic)。

相反,如您在createStatistics方法做,只是通過Meteor.userId(),我相信你不需要發送stat之一:

incrementStatistic : function(){ 
    UserStatistics.update({user_id: Meteor.userId()}, {$inc : {stat: 1}}); 
}, 
decrementStatistic : function(){ 
    UserStatistics.update({user_id: Meteor.userId()}, {$inc : {stat: 1}}); 
}, 

,並調用方法不帶任何參數:

Meteor.call('incrementStatistic'); 

順便說一句,我建議你採用一種使用mongodb語法的方法。有時您似乎使用撇號('user_id'),有時會引用(「user_id」),有時也不會使用它們(user_id)。對於字段名稱,使用它們是可選的,但對於操作符($ inc,$ set,$和$等),不使用引號或撇號是標準的。請參閱the documentation