开发者

Price validation includes word "Free" if users put 0 or words in price field

How do i make it so if users put the number 0 or type any words in my price:decimal field it registers it as the word Free?

As of now i just validate presence of price:

validates :price,      :presence => 开发者_Python百科true


I would have your field reference a new pair of get/set methods for "price_string"

#in your model
def price_string
  price == 0 ? "Free" : price
end

def price_string=(string)
  price = (string == "free" ? 0 : string)
end

Now you can refer to "price_string" in your forms.

#in your form
f.text_field :price_string


A simple way is to add a before_validation callback to do it.

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜