gpt4 book ai didi

ruby-on-rails - 更新时唯一性的 rails 验证

转载 作者:行者123 更新时间:2023-12-04 05:57:51 24 4
gpt4 key购买 nike

我对其中一个模型有以下验证规则,

validates :reciept_num, :presence => true,
:numericality => { :only_integer => true },
:uniqueness => true,
:on => :update,
:if => "!status_id.nil?"`

现在,当我使用 update_attributes 更新对象时方法它给了我以下错误
reciept_num: has already been taken .

在更新对象时,我没有更改 reciept_num 属性?那么,为什么此验证在更新时失败?

如果我不更新值,它必须是旧的,因此应该通过验证。我是不是错过了什么。

最佳答案

首先,不会根据属性是否已更改来运行验证(当然,除非您明确要求)。每次保存具有唯一性验证的记录并且可以运行验证时(由 :on:if:unless 选项定义),它会检查是否存在除自身以外的任何实例,其值应该是唯一的.

由于您的验证有条件,我想您最终可能会创建两个具有相同收据编号的实例,但两者都有一个空值 status_id .设置 status_id列和验证开始执行并找到其他实例。

另一件事是,由于您的验证仅在更新时,您可以使用相同的收据编号创建多个实例,再次尝试更新记录将触发验证。

不过,我只是猜测精确的场景。

关于ruby-on-rails - 更新时唯一性的 rails 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8622417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com