Проверка цены включает в себя слово «Бесплатно», если пользователи вводят 0 или слова в поле цены. - PullRequest
0 голосов
/ 03 июня 2011

Как мне сделать так, чтобы пользователи вводили число 0 или вводили какие-либо слова в мою цену: в десятичном поле оно регистрировалось как слово Бесплатно ?

На данный момент я просто проверяю наличие цены:

validates :price,      :presence => true

Ответы [ 2 ]

2 голосов
/ 03 июня 2011

Простой способ - добавить обратный вызов 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
2 голосов
/ 03 июня 2011

Я бы попросил ваше поле ссылаться на новую пару методов get / set для "price_string"

#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...