如果用户在价格字段中输入0或单词,则价格验证包括单词“Free”

时间:2011-06-03 08:53:59

标签: ruby-on-rails

如果用户输入数字 0 或在我的价格中输入任何单词,我该怎么做呢:十进制字段它将其注册为单词 Free

截至目前,我只是验证了价格的存在:

validates :price,      :presence => true

2 个答案:

答案 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