2010-06-15 140 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

相关问题