У меня есть два валидаций:дублирования Избегайте в Rails валидаторы
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: ...
делают то же самое. Как я могу это очистить?
По крайней мере, вы можете извлечь регулярное выражение в локальную константу и повторно использовать его таким образом. –