validates_numericality_of simply not working

p.price = "3.25"

you are trying to set price to a string object. p.price = 3.25 or I suppose p.price = "3.25".to_f