У меня есть модель Ride
с полем price
и проверкой точности.Я хочу отобразить свое собственное сообщение об ошибке, когда проверка не удалась, но она не работает.
Согласно Rails Gudes"опция: message позволяет вам указать сообщение, которое будет добавлено в коллекцию ошибок при сбое проверки. Когда эта опция не используется, Active Record будет использоватьсоответствующее сообщение об ошибке по умолчанию для каждого помощника проверки. Параметр: message принимает строку или Proc. "
Я делаю это точно так же, как в примере, и он не работает.
Направляющие Rails
validates :age, numericality: { message: "%{value} seems wrong" }
Мой пример
validates :price, numericality: { message: "Invalid price. Max 2 digits after period"}, format: { with: /\A\d{1,4}(.\d{0,2})?\z/ }
spec / models / ride_spec.rb
context 'with more than 2 digits after period' do
let(:price) { 29.6786745 }
it 'the price is invalid' do
expect(subject.save).to be_falsy
expect(subject).not_to be_persisted
puts subject.errors.full_messages.last # "Price is invalid"
end
end
Что я делаю не так?
Обновление
Это то, что я узнал до сих пор.Я установил цену пустой в тесте, и теперь она показывает сообщение об ошибке, которое мне нужно.
context 'with more than 2 digits after period' do
let(:price) { '' }
it 'the price is invalid' do
expect(subject.save).to be_falsy
expect(subject).not_to be_persisted
puts subject.errors.full_messages.last # "Price Invalid price. Max 2 digits after period"
end
end
Заключение: это работает для проверки «присутствия», а не для проверки численности, что очень запутаннопоскольку документы ясно говорят, что вы проверяете количество, а не присутствие.Я прав?Это ошибка или преднамеренная?