Ruby on Rails: convalida un costo

Qual è il modo migliore per convalidare un input costo / prezzo da parte di un utente, le seguenti regole di convalida:

  • Esempi di formati consentiti .23, .2, 1.23, 0.25, 5, 6.3 (massimo di due cifre dopo il punto decimale)
  • Valore minimo di 0,01
  • Valore massimo di 9,99

Controlla il prezzo e verifica il 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/ 

Per le validazioni lato client è ansible utilizzare un plugin jQuery come questo che consente di definire diversi formati validi per un dato input.

Per le convalide lato server e in base a questa domanda / risposta, è ansible utilizzare una colonna decimal per il price in cui è ansible definire i valori per precision e scale , la scale risolve le due cifre dopo la restrizione del punto decimale.

Quindi per convalidare la numericità, il valore minimo e massimo è ansible utilizzare il successivo metodo di convalida:

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

È ansible creare convalide personalizzate. Diciamo, ad esempio il secondo 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 

Maggiori informazioni su questo, nelle guide di Rails, qui .