我有两个验证:避免重复验证器
validates :email, format: { with: /\A(.+)@(aol|gmail|office365|outlook|verizon|yahoo)\.com\Z/i }, if: Proc.new { |user| user.imap_server.blank? }
validates :email, presence: true
validates :imap_server, presence: true, if: Proc.new { |user| user.email.present? && user.email_invalid? }
def email_invalid?
self.email =~ /\A(.+)@(aol|gmail|office365|outlook|verizon|yahoo)\.com\Z/i
end
我展示用户的形式。它显示一个email
字段,但不显示imap_server
字段。如果email
字段中的值与特定的正则表达式不匹配,那么我想再次显示它们的形式,同时出现imap_server
字段。如果他们输入imap_server
字段的值,那么我不再需要验证email
字段的正则表达式(尽管它仍然存在)。
感觉就像我复制验证的问题。 email_invalid?
和validates :email, format: ...
都做同样的事情。我怎样才能清理它?
至少您可以将正则表达式提取到本地常量并以此方式重用。 –