如果用户输入数字 0 或在我的价格中输入任何单词,我该怎么做呢:十进制字段它将其注册为单词 Free ?
截至目前,我只是验证了价格的存在:
validates :price, :presence => true
答案 0 :(得分:2)
我希望你的字段为“price_string”
引用一对新的get / set方法#in your model
def price_string
price == 0 ? "Free" : price
end
def price_string=(string)
price = (string == "free" ? 0 : string)
end
现在您可以在表单中引用“price_string”。
#in your form
f.text_field :price_string
答案 1 :(得分:2)
一种简单的方法是添加一个before_validation回调来执行此操作。
class ModelWithPrice < ActiveRecord::Base
# your validations ...
before_validation :convert_price_to_number
private
def convert_price_to_number
# no need to check for strings, to_f return 0.0 if the value cant be converted
self.price = self.price.to_f
# convert 0 to "Free" if needed
self.price = "Free" if self.price == 0
end
end