繁体   English   中英

Rails - 自定义唯一性验证

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM