【问题标题】:Rails 4 validation :greater_than :less_than on updateRails 4 验证 :greater_than :less_than 更新
【发布时间】:2014-09-04 17:04:54
【问题描述】:

我的 rails 应用中有一个 Player 模型和表格。有一个字段highest_level (int) 存储玩家达到的最高级别。由于每个玩家有多个个人资料,在某些情况下报告的级别可能低于数据库中的最高级别。

我对 validates 和 validates_numericality_of 做了一些研究,看来我可以分别使用 :greater_than 或 :less_than 来满足我的需要。

在我的 Player 模型中,我尝试了这个:

class Player < ActiveRecord::Base
  validates_numericality_of :highestLevel, greater_than: self.highestLevel
end

但是,执行最高级别值的更新或多或少的更新无关:

Player.update(8, highestLevel: 12)

我期望得到的是没有更新,因为我对玩家 ID 8 的值的最高级别为 15。有人可以发布或指向我的示例吗?

非常感谢!

【问题讨论】:

    标签: ruby-on-rails ruby validation ruby-on-rails-4 model


    【解决方案1】:

    在您编写代码时,不会评估您的作用域记录的highestLevel 属性。

    您可以使用Proc 访问范围记录的值:

    validates_numericality_of :highestLevel, greater_than: Proc.new { |r| r.highestLevel_was }
    

    【讨论】:

    • 我给了你的例子一个旋转,但我得到了和以前一样的东西——最高级别的值会更新,无论它是大于还是小于存储的值。我正在使用 Ruby 2.1 运行 rails 4.1.4。根据文档,这不应该有所作为。
    • 查看更新的答案,使用highestLevel_was
    • 我也试了一下,结果一样
    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    相关资源
    最近更新 更多