2012-01-18 53 views
1

我想在某些字段上使用:presence => true來驗證模型,但即使這些字段爲零,模型也會返回爲有效。這裏是我的重播模型的驗證:爲什麼這些存在驗證失敗

validate :match_id, :presence => true 
validate :replay_url, :presence => true 
validate :uploader_id, :presence => true 

如果我打開控制檯,然後輸入以下內容,你能明白我的意思:

1.9.3p0 :001 > r = Replay.new 
=> #<Replay id: nil, match_id: nil, replay_url: nil, created_at: nil, updated_at: nil, uploader_id: nil> 
1.9.3p0 :002 > r.valid? 
=> true 

有誰知道這是爲什麼?

+0

你給'validate'被調用,預計通過'errors.add'添加錯誤指示,什麼是錯的符號,返回值是忽略。你將通過AR得到一個'match_id'方法,所以'validate:match_id'將會運行,即使它不會像你期望的那樣工作。答案是正確的,但我想出了可能想知道爲什麼你的不正確的代碼默默失敗。 – 2012-01-18 07:16:45

回答

1

驗證* 小號 *

validates :match_id, :presence => true 
validates :replay_url, :presence => true 
validates :uploader_id, :presence => true