【问题标题】:Mongoid validations not workingMongoid 验证不起作用
【发布时间】:2011-10-02 04:37:49
【问题描述】:

我有一个 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

尽管它看起来应该可以工作,但模型会保存而不会引发错误(例如,值 nil 或“abc”)。

如何让它们工作?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 validation mongodb mongoid


    【解决方案1】:

    对我来说,您的验证工作正常:

    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)
    

    【讨论】:

    • 对我来说它不起作用。知道为什么会这样:irb(main):002:0> a.persisted? => true irb(main):003:0> a.valid? => true irb(main):004:0> a.save! => true irb(main):005:0> a.save => true irb(main):006:0> a.destroy => true
    • 这很奇怪,我想不出原因。我正在使用 mongoid 2.0.2 和 active-model 3.0.9。验证是否有可能以某种方式关闭?我知道您可以使用 save(false) 覆盖验证,但我不知道任何应用程序范围的开关。
    • 我也不能,这让我快疯了 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    相关资源
    最近更新 更多