2011-07-10 162 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