[英]Rails - Custom validation of uniqueness
我想在列(类型字符串)上赋予唯一性,但是问题在于我在使用函数和before_save
将它们插入数据库之前截断部分开头的一些字符串。 因此,rails唯一性验证不起作用,因为输入可能与数据库中的输入不同,即使在截断/格式化之后,它们应该是相同的。
我希望能够先截断我的字符串,然后验证它的唯一性,但是我不确定是否可以使用rails validates uniqueness: true
。 我只需要编写自定义validate
吗?
Rails回调的顺序是:
(-) 救
( - )有效
(1)before_validation
( - )验证
(2)after_validation
(3)before_save
(4)before_create
(-) 创造
(5)after_create
(6)after_save
(7)after_commit
细节在这里 。 所以你只需做一些像:
validates :your_data_field, uniqueness: true
before_validation :normalize_data
def normalize_data
# Normalize your data here
end
因此它将完全按照您的描述工作,并且不需要编写和自定义验证。 它会更漂亮!
如您所述,您将需要创建自定义验证器并使用validates_with。 有关的信息在这里:
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_with
要遵循DRY原则,并确保截断逻辑的任何更改都反映在验证器和before_save回调中,我建议创建一个返回截断字符串的方法,并在验证器和回调中使用相同的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.