2012-03-13 2 views
0

У меня есть эта проверка:Почему Chrome пропускает проверку числа?

validates :year, :presence => true, :numericality => { :only_integer => true }, :uniqueness => true 

Это отлично работает в Firefox, но в Chrome проверка numericality не работает. Если я пишу 23ab сохраняется как 23 и не показывает ошибок. Может быть из-за ввода типа ввода типа HTML5?

ответ

1

Осмотрите параметры, фактически полученные вашим действием (например, проверьте development.log) и опубликуйте информацию о том, что на самом деле отправлено на ваш контроллер в хеше params.

Проверка подлинности в модели происходит на стороне сервера после того, как браузер передал данные формы, прежде чем он будет сохранен/обновлен в базе данных. Таким образом, если один и тот же ввод из двух разных браузеров дает разные результаты проверки, то он, вероятно, изменяется браузером до того, как он будет принят действием контроллера.

Чтобы сказать это по-другому: это не проверка, которая пропущена, это входные данные, которые изменяются, по крайней мере, наиболее вероятно. Осмотрите, что на самом деле делает его на ваш params хэш, и вы будете на полпути домой.

+0

Вы правы, это должно быть поведение по умолчанию Chrome. Я пишу '2a' и выхожу за пределы ввода, и он автоматически переходит на' 2', прежде чем отправить форму. – josebailo

+0

Возможно ли, что Rails автоматически генерирует некоторые метаданные, которые Chrome реагирует на это поле (? Из-за вашей проверки?), Которое подается в представление, заставляя его форматировать его до его отправки? Просто догадка, но было бы здорово, если бы это было так. – jefflunt

Смежные вопросы