如何解决活动记录验证:插入时计算字段的唯一性
我有一个模型,该模型的计算字段必须唯一:
class MyModel < ApplicationRecord
before_save :set_unique_identifier
validates :unique_identifier,uniqueness: true
private
def set_unique_identifier
some calculation...
self.unique_identifier = the calculations.. (THIS IS A STRING)
end
end
Active Record让我创建具有相同unique_identifier的记录。
validates :unique_identifier,uniqueness: true
仅在我更新记录时才被触发。
如何在插入时对其进行验证?
解决方法
保存ActiveRecord模型按以下顺序进行操作:
- 运行
before_validation
钩子。 - 运行验证。
- 运行
before_save
钩子 - 保存。
当然还有很多,但是这些都是相关的部分。
我认为不能保证在步骤 3 中更改属性可以在步骤 2 中重新运行验证。
我认为您想在before_validation
钩子而不是before_save
钩子中设置唯一标识符:
class MyModel < ApplicationRecord
before_validation :set_unique_identifier
...
end
这样,一切都会以正确的顺序发生。
您还希望在数据库中包含唯一的约束/索引,以真正确保不会重复。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。