#ruby-on-rails #ruby #ruby-on-rails-5
#ruby-on-rails #ruby #ruby-on-rails-5
Вопрос:
Я работаю в приложении Rails 5.1, и мне просто нужно написать проверку на Float::NAN
и BigDecimal::NAN
, но, похоже, не могу найти ту, которая действительно будет работать. До сих пор я пробовал то, что, как я думал, будет работать с документами Rails:
validates :my_column, exclusion: { in: [BigDecimal::NAN, Float::NAN], message: 'NaN value is not allowed.' }
validates :my_column, numericality: { other_than: BigDecimal::NAN }
Но в обоих случаях я все еще могу сохранить значение NaN в базе данных.
Комментарии:
1. Почему
Float::NAN
в первую очередь можно передать илиBigDecimal::NAN
в модель?2. Ввод на стороне клиента. Мне нужно будет добавить проверку и на этой стороне, но это также защитит серверную часть базы данных.
3. Вы когда-нибудь пытались передать что-то в приложение Rails, которое заканчивалось как
Float::NAN
в столбцеfloat
типа? Я был бы удивлен, что это вообще возможно, и если Rails позволит это без возникновения ошибки.4. @spickermann не почему, а как это можно передать
Float::NAN
. OP однако вы получаете эту пользовательскую проверку, такую какvalidate :my_column_nan
иdef my_column_nan; errors.add(:my_column, 'NaN value is not allowed.') if self.my_column.to_f.nan?; end
решит ее5. @Travis затем создайте пользовательский валидатор , после чего вы можете просто добавить что-то вроде
validates :my_column, nan: false