2012-03-13 98 views
0

我有這個驗證:爲什麼Chrome跳過數字驗證?

validates :year, :presence => true, :numericality => { :only_integer => true }, :uniqueness => true 

這在Firefox罰款,但在Chrome中numericality驗證是行不通的。如果我寫23ab保存爲23並且不顯示錯誤。可以因爲HTML5的標籤輸入類型數量?

回答

1

檢查您的操作實際收到的參數(即檢查您的development.log),併發布有關params哈希中實際發送到控制器的信息。

模型中的驗證發生在服務器端,在瀏覽器發送表單數據之後,在數據庫中保存/更新之前發生。因此,如果來自兩個不同瀏覽器的完全相同的輸入產生不同的驗證結果,那麼它可能在瀏覽器被控制器動作接收之前進行修改。

換句話說:它不是被跳過的驗證,而是輸入數據被修改,至少是最有可能的。檢查什麼是實際製作到你的params散列,你會在半路回家。

+0

你說得對,必須是Chrome的默認行爲。在發送表單之前,我會寫入'2a'並在輸入之外單擊並自動轉到'2'。 – josebailo 2012-03-13 19:39:51

+0

Rails還可能自動生成某些Chrome瀏覽器在該字段上響應的元數據(?因爲您的驗證?),該元數據會被饋送到視圖中,導致它在發送之前對其進行格式化?只是一種預感,但如果能做到這一點,會很酷。 – jefflunt 2012-03-13 21:36:35