2011-07-10 157 views
2

我有一個Mongoid模型,驗證不起作用。沒有錯誤信息,沒有問題,但我可以插入無效的數據。Mongoid驗證不起作用

class Place 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    field :address, :type => String, :required => true 
    field :headline, :type => String, :required => true 
    validates :headline, :presence => true, :length => { :minimum => 10, :allow_blank => false } 
    validates :address, :presence => true, :length => { :minimum => 5, :allow_blank => false } 
    # ... 
end 

即使它看起來像它應該工作,模型保存而不發出一個錯誤(值爲零或「ABC」,例如)。

如何讓他們工作?

回答

3

你對我的驗證工作是否正常:如果不成功(驗證失敗)

place = Place.create(:headline => nil, :address => nil) 
puts place.persisted? # false 
puts place.valid?  # false 
puts place.save  # false 

createsave方法不引發異常,save返回false。 save!方法確實會引起以下異常:

Validation failed - Headline can't be blank, Headline is too short (minimum is 10 characters), Address can't be blank, Address is too short (minimum is 5 characters). (Mongoid::Errors::Validations) 
+0

對我而言,它不起作用。任何想法爲什麼這可能是:irb(main):002:0> a.persisted? => true irb(main):003:0> a.valid? => true irb(main):004:0> a.save! =>真 IRB(主):005:0> a.save =>真 IRB(主):006:0> a.destroy =>真 – Avishai

+0

那奇怪,我無法想到的原因爲了那個原因。我正在使用mongoid 2.0.2和主動模型3.0.9。不知怎的,有可能關閉驗證嗎?我知道你可以使用save(false)覆蓋驗證,但我不知道任何應用程序範圍的開關。 – Steve

+0

我也不行,這讓我發瘋了;-) – Avishai