Использовать validates_numericity_of проверки. Проверка чисел по умолчанию проверяет тип с плавающей запятой, вам нужно указать, хотите ли вы видеть целые числа. Поскольку количество не будет храниться в дБ, оно должно быть виртуальным.
Попробуйте это:
attr_accessor :quantity
validates_numericality_of :quantity, :only_integer => true
validates_numericity_of не принимает nil по умолчанию, вам не нужно проверять наличие атрибута, и, поскольку вы, возможно, захотите изменить диапазон количества в представлении, я не проверю его здесь.
Если вы хотите проверить диапазон, объявите его как константу в модели. Обращайтесь к этой константе как в проверке, так и в просмотре.