Aquí es lo que estoy usando en mi modelo:¿Cómo elimino los signos de dólar de un valor antes de la validación en Rails?
before_validation :strip_dollar_sign
validates :amount_due,
:format => { :with => /^\d+??(?:\.\d{0,2})?$/ },
:numericality => {:greater_than => 0}
private
def strip_dollar_sign
self.amount_due = self.amount_due.to_s.tr!('$,','').to_f
end
Si me quedo la línea de la función strip_dollar_sign a mano en la consola de Rails consigo exactamente lo que quiero (es decir, $ 400 termina como 400,0), pero cuando Utilizo el formulario real en mi aplicación, el valor siempre termina en 0.0. ¿Alguien capta lo que estoy haciendo mal?
El dinero no se debe almacenar como flotantes, sino como decimal en la base de datos y BigDecimal en ruby. Los flotantes pueden tener errores de redondeo que pueden causar resultados inesperados. – DGM