Проверка на соответствие значениям NaN в модели Rails

#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