Как запретить Rails изменять содержимое поля ввода при сбое проверки? - PullRequest
1 голос
/ 17 декабря 2010

У меня есть десятичное поле price в модели моего продукта и простая проверка:

class Price < ActiveRecord::Base
  ...
  validates_numericality_of :price
  ...
end

Если я наберу по ошибке 33.0p, он говорит: «Цена не число» (Я согласен) и изменяет содержимое поля ввода с 33.0p на 33.0.

Итак, если я наберу 33.0p и быстро нажму кнопку отправки (думая, что все в порядке), яполучит сообщение об ошибке.Затем я посмотрю в поле ввода, чтобы проверить, что не так.Но там я увижу действительное число (33.0) и задам себе вопрос: «Что не так ...?».

Есть ли какой-нибудь способ запретить Rails изменять содержимое поля ввода при проверкене удается?

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

Другой вариант будет использовать read_attribute_before_type_cast, то есть f.text_field(:price, :value => @product.read_attribute_before_type_cast(:price)).

1 голос
/ 17 декабря 2010

Причина этого такая же, как мой ответ на ваш другой вопрос ;Rails преобразует входные данные в число с плавающей точкой в ​​какой-то момент во время процесса, и поэтому значение с плавающей точкой - это то, что отображается.

Я не проверял это, но вы можете попробовать переопределить значение текстового поля, чтобы оно былоparams[:product][:price].Теоретически это будет выглядеть примерно так:

f.text_field(:price, :value => (params[:product] ? params[:product][:price] : @product.price))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...