我有兩個驗證:避免重複驗證器
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: ...
都做同樣的事情。我怎樣才能清理它?
至少您可以將正則表達式提取到本地常量並以此方式重用。 –