2010-06-15 113 views
0

我正在使用mongo_mapper 0.7.5和rails 2.3.8,並且我有一個實例方法在我的控制檯中工作,但不在我的實際應用程序的控制器中。我不知道這是爲什麼。MongoMapper,Rails,增量工作在控制檯但不是控制器

#controller 
if @friendship.save 
    user1.add_friend(user2) 
... 

#model 
... 
key :friends_count, Integer, :default => 0 
key :followers_count, Integer, :default => 0 

def add_friend(user) 
    ... 
    self.increment(:friends_count => 1) 
    user.increment(:followers_count => 1) 
    true 
end 

而這在控制檯工作,但在控制器它不會改變追隨者數量,只有朋友數。是什麼賦予了?我唯一能想到的就是我傳遞用戶的方式是問題,但我不知道如何解決這個問題。

+0

我編輯了我的答案...看看:] – 2010-06-15 00:57:26

回答

2

問題很可能是增量發生了,但是您尚未將模型與數據庫中的數據重新加載。增量激發數據庫查詢,但不更新實例。在控制器中的add_user調用之後嘗試@ friendship.reload和user.reload。

+0

有什麼問題,謝謝,主要是作品,但大約一半的時間用戶的friend_count會顯示一箇舊的值......這可能與索引或身份地圖有關嗎? – 2010-06-17 21:04:01

+0

如果你不清除身份地圖,它肯定可以與此相關。索引與它沒有任何關係。 – 2010-06-20 16:04:18

0

看起來好像你沒有保存user,所以試試increment!。此方法將保存user,如果可以保存記錄,則返回true。

編輯

我發現這樣做的(希望是正確的)的另一種方式:

User.increment(user.id, :followers_count => 1) 

我還沒有測試此代碼!但我希望它能起作用。

+0

增量!是不是在mongo_mapper 任何其他想法?我試過 self.save! user.save! 增量後,但它不工作 – 2010-06-15 00:37:09

+0

如果'user.save'不起作用,我不知道還有什麼:/ – 2010-06-15 00:44:18

+0

感謝您的幫助j,但我也嘗試過,並沒有這樣運氣。奇怪的是,我嘗試切換方法(以使user1和user2被顛倒),並且我仍然無法獲得followers_count來更新。作爲一個停止差距解決方案,我將只使用user1.update_attributes(:followers_count => user1.followers_count + 1),但這很醜陋,我無法弄清楚followers_count – 2010-06-15 02:57:23

相關問題