Ruby on Rails – Validate a Cost

¿Cuál es la mejor manera de validar una entrada de costo / precio por un usuario? Reglas de validación a continuación:

  • Ejemplos de formatos permitidos .23, .2, 1.23, 0.25, 5, 6.3 (máximo de dos dígitos después del punto decimal)
  • Valor mínimo de 0.01
  • Valor máximo de 9.99

Verifique el precio y verifique el formato

#rails 3 validates :price, :format => { :with => /\A\d+(?:\.\d{0,2})?\z/ }, :numericality => {:greater_than => 0, :less_than => 10} #rails 2 validates_numericality_of :price, :greater_than => 0, :less_than => 10 validates_format_of :price, :with => /\A\d+(?:\.\d{0,2})?\z/ 

Para las validaciones del lado del cliente puede usar un complemento jQuery como este que le permite definir diferentes formatos válidos para una entrada determinada.

Para las validaciones del lado del servidor y de acuerdo con esta pregunta / respuesta, quizás deba usar una columna decimal para el price en la que pueda definir valores de precision y scale , la scale resuelve los dos dígitos después de la restricción del punto decimal.

Luego, para validar la numericidad, el valor mínimo y máximo, puede usar el siguiente método de validación:

 validates_numericality_of :price, :greater_than => 0, :less_than => 10 

Puede crear validaciones personalizadas. Las leyendas dicen, por ejemplo, el segundo caso:

 validate :price_has_to_be_greater_than_minimum def price_has_to_be_greater_than_minimum errors.add(:price, "price has to be greater than 0.01") if !price.blank? and price > 0.01 end 

Más sobre esto, en Rails Guides, aquí .