Этот является полезным постом об этой проблеме.
Короче говоря, Rails автоматически загружает классы в вашем каталоге lib только в том случае, если они следуют соответствующим соглашениям об именах.
Все эти validates_whatever_of :attr
макросы - это вызов validates :attr, :whatever => true
.
Проблема в том, что вы используете validate
, а не validates
.
Фактически validates и validates_presence_of не совсем равны!
validates_presence_of позволяет вам также лениво проверять на примере значение в поле, включенном в другую таблицу.
Примерно так:
validates_presence_of :pay_type, :inclusion => PaymentType.names
Что-то, с чем вы не можете так легко справиться с чем-то подобным
validates :pay_type, presence, :inclusion => PaymentType.names
Потому что включение оценивается только в первый раз (не ленивым образом)
В Rails 3.x и 4.x - теперь рекомендуется использовать следующий синтаксис:
validates :email, presence: true
validates :password, presence: true
Вместо способа 2.x:
validates_presence_of :email
validates_presence_of :password