В настоящее время я делаю следующее:
validates :new_pass,
:presence => {:if => :new_record?},
:confirmation => {:if => :password_not_blank?},
:length => {:within => 6...64, :if => :password_not_blank?}
def password_not_blank?
!new_pass.blank?
end
Но это не DRY, держу пари, есть способ пропустить проверки, если атрибут отсутствует.
Кроме того, нет никакого метода DSL для проверки? Я думаю, что это было бы чище, чем реализация логики внутри хэшей...
-- Редактировать, спасибо ^^ --
Это то, что я получил сейчас:
validates :new_pass,
:allow_blank => {:on => :update},
:presence => {:on => :create},
:confirmation => true,
:length => {:within => 6...64}
И просто для записи, и чтобы никто не беспокоился (?), это виртуальный атрибут, фактический пароль зашифрован с помощью before_save, проверяя, что :new_pass не является пустым.