【发布时间】:2012-01-18 10:57:40
【问题描述】:
基本上我有一个 User 模型,它具有某些属性,比如“健康”,另一个 Battle 模型记录了用户之间的所有战斗。用户可以互相打架,一定的概率将决定谁赢。双方在战斗后都会失去生命值。
所以在 Battle 控制器中,我执行了“CREATE”操作,
@battle = Battle.attempt current_user.id, opponent.id
在战斗模型中,
def self.attempt current_user.id, opponent_id
battle = Battle.new({:user_id => current_user.id, :opponent_id => opponent_id})
# all the math calculation here
...
# Update Health
...
battle.User.health = new_health
battle.User.save
battle.save
return battle
end
回到Battle控制器,我做了...
new_user_health = current_user.health
战斗后获得新的生命值。但是我得到的值是旧的健康值(战斗前的健康值)。
以前有人遇到过这种问题吗???
更新
我只是添加
current_user.reload
行前
new_user_health = current_user.health
这行得通。问题解决了。谢谢!
【问题讨论】:
-
我认为这就是你所面临的:stackoverflow.com/questions/5519741/…
-
哪一部分令人困惑?是的,这是实际代码,但我只强调主要内容
-
我编辑了代码,现在不那么混乱了吗?
-
John,在 Ruby 中,类是大写的,常量是全大写的,方法名是小写的(或者,如果你还没有摆脱 Java 的方式,那就是驼峰式)。看到似乎是大写的方法名称是不寻常的。我怀疑,这让@sarnold 感到困惑。
-
我不会称之为竞争条件,我会称之为更新数据库而不是 current_user。
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1