2011-06-03 4 views
0

を入力するか、値段に任意の単語を入力すると、小数点のフィールドにという単語が登録されます無料ユーザーが価格フィールドに0または単語を入力すると「無料」という単語が含まれます

今のところ私はちょうど価格の存在を検証:

validates :price,  :presence => true 
+1

あなたはjavascriptを使用してオンザフライで実行できます。 –

+0

@Mikhail Nikalyukinはこれを正しい方向に向けることができますか? – LearningRoR

答えて

2

は、私が今

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

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

あなたが参照できる「PRICE_STRING」のためのあなたのフィールド参照を取得/設定メソッドの新しいペアを持っているでしょうあなたのフォームの "price_string"に。

#in your form 
f.text_field :price_string 
+0

私のprice_stringフィールド "wdwds"または0に入力しようとしましたが、 "価格は空白にできません"というエラーが戻ってきました。編集:私は正当な価格を試しても何も動作していないようです。 – LearningRoR

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 
+0

covert_price_to_numberは何をしていますか? – LearningRoR

+1

価格属性のto_f(floatに変換)を呼び出します。価格が「無料」のように浮動小数点に変換できない文字列の場合、0.0 –

+0

が返されますが、無効な価格を入力すると「フリー」という単語が入力されますか? – LearningRoR

関連する問題