2010-12-17 39 views
1

我有一個小數price場在我的產品型號,和一個簡單的驗證:如何防止驗證失敗時Rails更改輸入字段的內容?

class Price < ActiveRecord::Base 
    ... 
    validates_numericality_of :price 
    ... 
end 

如果我錯33.0p類型,它說:「價格是不是一個數字」(我同意),並改變輸入字段的內容從33.0p33.0

因此,如果我輸入33.0p並快速按下提交按鈕(認爲一切正常),我會收到錯誤消息。然後,我會查看輸入字段以檢查出現了什麼問題。但是,在那裏我會看到一個有效的號碼(33.0),我會問自己「有什麼問題......?」。

有什麼辦法可以防止Rails在驗證失敗時更改輸入字段內容?

回答

2

另一種選擇是使用read_attribute_before_type_cast,即f.text_field(:price, :value => @product.read_attribute_before_type_cast(:price))

+1

這甚至更好:':value => @ product.price_before_type_cast'。非常感謝 !!! – 2010-12-17 05:27:52

1

原因與我對other question的回答相同;在這個過程中,Rails將輸入轉換爲浮點數,因此float值就是顯示的數值。

我還沒有測試過這個,但是您可以嘗試覆蓋文本字段的值爲params[:product][:price]。從理論上講,這將是這個樣子:

f.text_field(:price, :value => (params[:product] ? params[:product][:price] : @product.price)) 
+0

This Works!非常感謝! – 2010-12-17 05:22:19

相關問題