Проверка значения в Rails - PullRequest
2 голосов
/ 13 марта 2012

Я пытаюсь проверить число с плавающей запятой, которое может быть между 1 и 6,5, но только с шагом 0,5, поэтому {1, 1,5, 2,0, 2,5, 3, 3,5, 4, 4,5, 5, 5,5, 6, 6,5}.Есть ли способ проверить это в рельсах.Пока у меня есть:

validates :value, :inclusion => 1..6.5, is_value_valid => true

def is_value_valid
  if self.value % 0.5 == 0
    true
  else
    false
  end
end

При тестировании я получаю ошибки, я не думаю, что именно так вы вызываете метод is_value_valid.

Ответы [ 2 ]

6 голосов
/ 13 марта 2012

Вы можете проверить его с помощью пользовательского метода, поэтому ваша полная проверка должна выглядеть следующим образом:

validates :value, :inclusion => {:in => 1..6.5}
validate :value_is_multiple_of_point_five

def value_is_multiple_of_point_five
    unless value % 0.5 == 0
        errors.add(:value, "must be multiple of 0.5")
    end
end
0 голосов
/ 13 марта 2012

Прежде всего, вам придется использовать столбец t.decimal, если вам действительно нужны такие значения, как 1 и 5.5, при использовании значения с плавающей точкой откройте дверь для всех обычных чисел с плавающей запятой проблемы. Если вы используете десятичный столбец, Rails будет работать со значениями BigDecimal для вашего value, и вы будете в порядке, пока вы все храните в земле BigDecimal:

validate :valid_value_very_vigorously
HALF  = BigDecimal('0.5')
UPPER = BigDecimal('6.5')
LOWER = BigDecimal('1.0')

def valid_value_very_vigorously
    errors.add(:value, "Value must be at least #{LOWER}") if(value < LOWER)
    errors.add(:value, "Value must be at most #{UPPER}")  if(value > UPPER)
    errors.add(:value, "Value must be a multiple of 0.5") if(value % HALF != 0)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...