【问题标题】:How to increment decimal value?如何增加十进制值?
【发布时间】:2014-10-12 20:26:19
【问题描述】:

在表user 中有一个列points

我想增加十进制值。

@user = User.find(@ok.user_id)
@user.points = @user.points + 0.8
@user.save

如果不是+ 0.8 我把+ 1 工作。

我使用的是 Mysql,该列是 DECIMAL。

【问题讨论】:

  • 为什么点的列是 varchar 而不是小数?如果你把它用作小数,如果它是一个小数,会更有意义!
  • 好的。我已经改成十进制但是还不行
  • 你能提供比it doesn't work更多的细节吗? @user.points.class 有什么用?
  • 请不要使用m.p = m.p + n; m.save 来增加列值,在数据库中进行操作以避免竞争条件和丢失数据。
  • @muistooshort 我该怎么做?

标签: mysql ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

如果您想以一种高效、可靠的方式递增:

User.where(id: @ok.user_id).update_all([ 'points=points+?', 0.8 ])

这避免了竞争条件并且不需要加载模型。这里的缺点是您加载的任何模型都已过时,需要在使用它们之前使用reload 进行更新,因为它们的点数已关闭,但这并不是一件坏事。后台可能进行了任意数量的修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 2015-01-27
    • 1970-01-01
    • 2014-12-21
    • 2012-10-07
    • 1970-01-01
    • 2013-08-13
    • 2013-06-07
    相关资源
    最近更新 更多