validates_format_of 和 validates 之间的区别

use*_*969 3 ruby-on-rails ruby-on-rails-4

我们可以通过执行以下操作来验证电子邮件:

validates :email, format: { with: VALID_EMAIL_REGEX }
Run Code Online (Sandbox Code Playgroud)

或者

validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create
Run Code Online (Sandbox Code Playgroud)

2种方法有什么区别。一种方法比另一种更好吗?

Bar*_*cha 5

这两种形式没有区别。第一个只是一个方便的快捷方式,可以在单个属性上指定多个验证。例如,假设您想确保电子邮件有效但也是唯一的。在你的例子中使用第二种形式,这将被写成

validates_uniqueness_of :email
validates_format_of :email, with: VALID_EMAIL_REGEX
Run Code Online (Sandbox Code Playgroud)

或者,它可以更简洁地使用 validates

validates :email, uniqueness: true, format: { with: VALID_EMAIL_REGEX }
Run Code Online (Sandbox Code Playgroud)

使用的validates另一个好处是您可以将默认验证与您自己的自定义验证混合使用,只需调用validates. 更多信息在这里