2015-12-17 2 views
0

Я работаю над старой версией рельсов 3.2. Столбец - string, и мне нужно проверить, что значение равно <= 0.1. Из documentation говорится: «По умолчанию он будет соответствовать необязательному знаку, за которым следует целое число или число с плавающей запятой».Значение, превышающее 0,1

validates :min_amount, numericality: { greater_than_or_equal_to: 0.1 }

Но даже когда я представляю 0.5 это говорит, что это не больше или равно 0.1

+2

Почему столбец строкового типа? –

+0

Ваша проблема в том, что это строковый тип. Строковый тип будет вычисляться до нуля по отношению к плавающей точке. Вам нужно будет создать лямбду, которая преобразует ее в плавающую точку, а затем выполнит сравнение. –

+0

@ Иордан, это хороший вопрос. У этого приложения есть некоторые серьезные проблемы, которые мы пытаемся решить после его принятия. Это была одна гигантская головная боль за другой. – covard

ответ

1

попробовать это, он должен преобразовать значение автоматически всплывают:

validates :min_amount, numericality: { greater_than_or_equal_to: 0.1, only_float: true } 
+0

Похоже, что это все еще вызывает ту же ошибку '* Минимальная сумма должна быть больше или равна 0,1' – covard

+1

Ничего, потому что предыдущий разработчик (который не знал рельсов и не знал, что он делает) добавил 'parse_as_integers' к этому атрибуту. Если бы его модель не была 384 линиями, было бы легче это увидеть. – covard

0

Преобразовать строку в десятичную точку плавучего с to_f. Или сделайте столбец самой плавающей точкой.

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